我有一个问题,我想在进行深拷贝时克隆一个对象指针。 就像我有 T* t1 并且我想以 *t1.x= *t2.x 的方式创建一个新的对象指针 T* t2。
写一个复制构造函数是个好主意吗?
T(const T* cpy)
{
m_var = (*cpy).m_var;
}
T* t1 = new T;
T* t2(t1);
使用上述方法需要注意什么?
谢谢 茹琪
最佳答案
为此,您应该编写一个普通的复制构造函数并像这样使用它:
T(const T& cpy)
: m_var(cpy.m_var) // prefer initialization-list, thanks to @Loki Astari
{}
T* t1 = new T;
T* t2 = new T(*t1);
在您显示的代码中,T* t2(t1);
永远不会调用您声明的构造函数(顺便说一下,它不是复制构造函数),因为它只是初始化指针 t2
指向指针 t1
的值,使两者指向同一个对象。
正如@Nawaz 指出的那样,这个复制构造函数等同于编译器生成的复制构造函数,因此您实际上不需要编写它。事实上,除非您有任何手动管理的资源(通常您不应该这样做),否则编译器生成的复制构造函数总是没问题的。
关于c++ - 复制构造函数中的指针参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7833224/