三个关于实施其中一个CPP的规则究竟是什么

时间:2017-01-17 13:06:42

标签: c++

我的老师告诉我,当我使用三个中的一个(即复制构造函数\默认\赋值)时,编译器不会免费使用另一个,我必须自己实现它们。 但我试图实现这样的构造函数:

A(int a): integer(a){};

然而我成功了:

A my_first_ob(100);
A my_second_ob(my_first_ob);

怎么可能? 也许有人可以在这里清楚我的事情?

1 个答案:

答案 0 :(得分:0)

您实现的构造函数不是复制构造函数或默认构造函数,因此它与您的老师所说的(您认为)无关。

我相信你或你的老师混淆了两条规则。

一条规则是

  • 如果您实现了非默认构造函数但没有默认构造函数,那么"编译器生成的"默认构造函数被隐式删除 如果你想要一个,你需要自己定义它。 (在C ++ 11中,您可以使用= default;。)

(有更多情况导致"特殊会员功能"被删除,但这是大多数人首先偶然发现的。)

另一条规则("三条规则",这是更多经验法则)

  • 如果您需要实现复制构造函数,析构函数或赋值运算符,可能需要实现所有这三个,所以立即执行。