我有一个问题,我想在进行深度复制时克隆对象指针。就像我有 T* t1 并且我想以 *t1.x= *t2.x 的方式创建一个新的对象指针 T* t2。
编写一个复制构造函数,其工作方式如下:
T(const T* cpy)
{
m_var = (*cpy).m_var;
}
T* t1 = new T;
T* t2(t1);
Run Code Online (Sandbox Code Playgroud)
如果使用上述方法,我应该注意什么?
谢谢鲁奇
为此,您应该编写一个普通的复制构造函数并像这样使用它:
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);
Run Code Online (Sandbox Code Playgroud)
在您显示的代码中,T* t2(t1);
永远不会调用您声明的构造函数(顺便说一下,它不是复制构造函数),因为它只是将指针初始化为指针t2
的值t1
,使两者都指向同一个对象。
正如@Nawaz 所指出的,这个复制构造函数相当于编译器生成的那个,因此您实际上不需要编写它。事实上,除非您有任何手动管理的资源(通常您不应该这样做),否则您总是可以使用编译器生成的复制构造函数。
归档时间: |
|
查看次数: |
1538 次 |
最近记录: |