为何声明仅一个构造函数后,C++类却显示两个构造函数?
问题:未声明的构造函数是什么?
你编写的C++类代码如下:
class MyClass { private: PCWSTR _windowName{}; PCWSTR _windowTitle{}; public: MyClass(PCWSTR wndName, PCWSTR wndTitle) { this->_windowName = wndName; this->_windowTitle = wndTitle; } };
创建该类对象时,你发现存在两个构造函数,一个是你声明的带两个PCWSTR参数的构造函数,另一个是你未手动声明的构造函数。
那个未声明的构造函数是拷贝构造函数,它是C++编译器自动生成的特殊成员函数之一。
当类没有显式声明拷贝构造函数时,编译器会自动生成一个默认版本,函数签名大致为:
MyClass(const MyClass& other);
这个默认拷贝构造函数的作用是对类的成员变量执行浅拷贝——直接复制成员变量的值。针对你类中的PCWSTR(宽字符指针类型)成员,它会直接复制指针的地址,而非指针指向的字符串内容。
如果你的类涉及动态内存分配(比如自行管理字符串内存),这种浅拷贝可能引发诸如重复释放内存之类的问题,但在当前类的场景下,因为只是保存外部传入的指针,默认拷贝构造函数的行为符合编译器的默认逻辑。
内容的提问来源于stack exchange,提问作者Zombies are Real
相关产品推荐
相关产品推荐

