构造、拷贝(复制)构造、赋值构造以及析构
2017-06-06 11:18
323 查看
#include<iostream> using namespace std; class Human { public: Human(){ cout << "construct : " << ++human_num << endl; } Human(const Human &){ cout << "copy: " << ++human_num << endl; } Human &operator=(const Human &){ cout << "assign: " << ++human_num << endl; return *(new Human); } ~Human(){ cout << "destruct: " << --human_num << endl; } static int human_num; }; int Human::human_num = 0; Human f1(Human x) { cout << "2--------" << endl; return x; cout << "3--------" << endl; } void main() { Human h1;//调用构造函数,human_num = 1; cout << "1--------" << endl; Human h2 = f1(h1);//拆分来看,a.先看表达式右值,右值为一个函数,并且是值传递,调用拷贝构造函数,human_num = 2, //b.然后紧接着看表达式左值,调用拷贝构造函数,将f1返回的临时变量赋给h2,human_num = 3, //c.最后,退出f1函数时,销毁x,调用析构函数,human_num = 2;注意b和c执行的顺序; cout << "4--------" << endl; //退出main函数,先析构h2, human_num = 1, 再析构h1, human_num = 0; //思考以下代码 //Human h1; //cout << "1--------" << endl; //Human h2; //h2 = f1(h1);//此处为赋值构造,分析更为繁琐 //cout << "4--------" << endl; }
string类
#include <iostream> #include <assert.h> using namespace std; class String { public: String(const char *str = NULL);//构造函数 String(const String &other);//拷贝构造函数 String &operator=(const String &other);//赋值构造函数 ~String(void);//析构函数 private: char *m_data;//用于保留字符串 }; String::~String(void) { //delete m_data; delete[]m_data; } String::String(const char *str) { if (NULL == str) { m_data = new char[1]; assert(m_data != NULL); *m_data = '\0'; } else { int length = strlen(str); m_data = new char[length + 1]; assert(m_data != NULL); strcpy(m_data, str); } } String::String(const String &other) { int length = strlen(other.m_data); m_data = new char[length + 1]; assert(m_data != NULL); strcpy(m_data, other.m_data); } String &String::operator=(const String &other) { //1.自检查赋值 if (this == &other) return *this; //2.释放原有的内存资源 delete[]m_data; //3.分配新的内存资源,并复制内容 int length = strlen(other.m_data); m_data = new char[length + 1]; assert(m_data != NULL); strcpy(m_data, other.m_data); //4.返回本对象的引用 return *this; }
相关文章推荐
- 继承中构造、析构 与 拷贝构造、赋值中的调用区别
- String类简单实现(构造、拷贝构造、析构、赋值、输出、比较、字符串加、长度、子串)
- C++对象的构造与拷贝以及析构
- 简单的String类(构造、拷贝构造、赋值构造、析构等)
- 让我们一步一步实现一个完整的 String 类:构造、拷贝、赋值、移动和析构
- 请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能
- 复数类的相关运算(判断大小及四则运算)->(构造,析构,拷贝复制,运算符重载)
- 继承中构造、析构 与 拷贝构造、赋值中的调用区别
- C++我们必须要了解的事之具体做法(1)——构造、复制构造、析构、赋值操作符背后的故事
- C++ 了解C++默默编写并调用哪些函数(构造 析构 拷贝构造 拷贝赋值)
- 结构体的构造、拷贝、赋值、析构和字符串的拷贝、构造、赋值和析构函数的比较
- C++二叉树之构造拷贝赋值,递归和非递归的前序遍历,中序遍历和后序遍历,以及层序遍历
- string的四个函数--构造、析构、拷贝、赋值
- 构造,复制,赋值,析构
- 类构造,析构,赋值,拷贝
- 关于对象的构造、复制构造、析构、赋值的问题
- 请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。
- 类的基本成员函数实现(构造,拷贝构造,拷贝赋值,移动构造,移动赋值,析构)
- 手写两个类,要体现构造,析构,拷贝构造,赋值,虚函数,重载函数等特点。
- boolan第二周笔记:构造函数、拷贝构造、赋值构造、析构函数