【问题标题】:Does the default assignment operator call operator= on all members?默认赋值运算符是否对所有成员调用 operator=?
【发布时间】:2012-09-19 00:05:33
【问题描述】:

同样,默认的复制构造函数会调用所有成员的复制构造函数吗?例如,如果一个类有一个像这样的非 POD 成员:

class A
{
    std::string str;
};

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • "是的,编译器生成的可以正常工作。" - 即使是具有 const 成员的类?
    • @spin_eight 那么复制或赋值甚至无法编译。
    • @LuchianGrigore:实际上,副本会编译。任务显然不会。
    猜你喜欢
    • 2018-04-10
    • 2010-12-22
    • 2010-10-12
    • 2013-08-09
    • 2014-04-21
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多