C++默认为类生成了四个缺省函数:
A(void); // 缺省的无参数构造函数 A(const A &a); // 缺省的拷贝构造函数 ~A(void); // 缺省的析构函数 A & operate =(const A &a); // 缺省的赋值函数
这不禁让人疑惑,既然能自动生成函数,为什么还要程序员编写?
原因如下:
(1)如果使用“缺省的无参数构造函数”和“缺省的析构函数”,等于放弃了自主“初始化”和“清除”的机会,C++发明人Stroustrup的好心好意白费了。
(2)“缺省的拷贝构造函数”和“缺省的赋值函数”均采用“位拷贝”而非“值拷贝”的方式来实现,倘若类中含有指针变量,这两个函数注定将出错。
缺省的拷贝构造函数与缺省的赋值函数的区别是:
背后实现原理:前者是在返回的时候复制并创建,后者是已经创建过对象了,只是用来重新赋值而已.
调用方式:相同的.
#include <iostream> #include <cstdio> #include <cstring> using namespace std; class String { public: String(const char *str=NULL); String(const String &other); String & operator=(const String &other); ~String(); private: char *m_data; }; /* *普通构造函数 *构造函数首先根据一个字符串常量创建一个String对象。 *这个构造函数首先分配了足够的内存,然后把这个字符串常量复制到这块内存 */ String::String(const char *str) { cout<<" CCC normal "<<endl; if (str == NULL){ m_data = new char[1]; *m_data = '