C 中用户定义的复制构造函数
在 C 中,编译器通常为类生成一个默认的复制构造函数,该构造函数按成员执行复制。但是,在某些场景下,用户定义的复制构造函数是必要的。
什么时候需要用户定义的复制构造函数?
用户定义的复制构造函数是当默认复制构造函数的成员复制行为不足时需要。考虑以下示例:
<code class="cpp">class Class { public: Class(const char* str); ~Class(); private: char* stored; }; Class::Class(const char* str) { stored = new char[srtlen(str) + 1]; strcpy(stored, str); } Class::~Class() { delete[] stored; }</code>
在此示例中,默认的复制构造函数将简单地将指针复制到存储的成员,而不是复制底层缓冲区。如果一个副本在另一个副本之前被销毁,这可能会导致未定义的行为。
用户定义的副本构造函数
要解决此问题,您可以定义一个用户定义的副本执行深度复制的构造函数:
<code class="cpp">Class::Class(const Class& another) { stored = new char[strlen(another.stored) + 1]; strcpy(stored, another.stored); }</code>
此复制构造函数分配新内存并复制存储成员的内容,确保两个副本都有自己独立的缓冲区。
以上是C 中何时需要用户定义的复制构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!