我对复制构造函数的使用有疑问。我知道还有很多其他问题和各种各样的教程,但我无法彻底解决我的问题。
我有一个实现复制构造函数的类A
:
A::A(const A& a) { ....... }
现在在另一个班级B
中,我有一个私人属性:
A myA;
在执行期间,使用指向B
对象的指针调用A
方法,然后调用它anAPointer
。我现在想将anAPointer
指向的元素复制到B::myA
。如果指针后面的元素稍后更改,我不希望这些更改影响myA
属性。
我还使用了this->myA = A(*anAPointer);
。这会产生我想要的效果吗?
我是否必须在delete myA
的析构函数中调用B
?
答案 0 :(得分:2)
您的代码:
A(*anAPointer)
正在调用A
的复制构造函数,因此this->myA
将是A
与anAPointer
指向的值无关的实例。对第一个的更改不会传播到另一个,反之亦然(除非您的类A
处理共享资源,但在您的问题中没有指出。)
myA
不是指针,因此您无需在delete
的析构函数中调用B
。
请注意,如果您要在A
中实施复制构造函数,则应考虑rule of 3/5/0和copy and swap idiom。