什么时候需要用户定义的复制构造函数?
C 编译器自动为类生成一个复制构造函数,该构造函数按成员方式执行默认复制。然而,在某些情况下,我们可能需要定义自己的用户定义的复制构造函数。
定义用户定义的复制构造函数的原因:
示例:
考虑以下存储字符串的类:
<code class="cpp">class Class { public: Class(const char* str); ~Class(); private: char* stored; };</code>
使用默认的复制构造函数,存储的成员只能通过引用复制,当其中一个副本被复制时,会导致未定义的行为被毁了。为了防止这种情况,我们定义了一个执行深度复制的用户定义的复制构造函数:
<code class="cpp">Class::Class(const Class& another) { stored = new char[strlen(another.stored) + 1]; strcpy(stored, another.stored); }</code>
此外,赋值运算符也需要用户定义的复制构造函数才能正确执行深度复制:
<code class="cpp">void Class::operator = (const Class& another) { char* temp = new char[strlen(another.stored) + 1]; strcpy(temp, another.stored); delete[] stored; stored = temp; }</code>
以上是什么时候应该在 C 中实现用户定义的复制构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!