默认赋值运算符是否在所有成员上调用operator =?

时间:2012-09-27 08:43:30

标签: c++ class copy-constructor assignment-operator

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

class A
{
    std::string str;
};

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

  

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

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