6

同样,默认复制构造函数是否调用所有成员的复制构造函数?例如,如果一个类有一个非 POD 成员,如下所示:

class A
{
    std::string str;
};

...默认的编译器生成的复制构造函数和赋值运算符会正常工作吗?他们会调用字符串的复制构造函数,operator=还是只是按位复制成员变量str

换句话说,拥有std::string成员是否意味着此类需要用户实现的复制构造函数和赋值运算符?

4

1 回答 1

5

是的,编译器生成的可以正常工作。

但是,如果您实现自己的并将它们留空,则不会。

如果您不管理内存并且您的所有成员都提供了正确的复制/赋值/销毁,那么您不需要(也不应该)实现自己的复制构造函数/析构函数/赋值运算符。

换句话说,拥有 std::string 成员是否意味着此类需要用户实现的复制构造函数和赋值运算符?

不,编译器生成的将完美运行。

于 2012-09-27T08:44:39.307 回答