c++ - 复制构造函数中的指针参数

标签 c++

我有一个问题,我想在进行深拷贝时克隆一个对象指针。 就像我有 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/

相关文章:

c++ - 将 std::unique_ptr 用于 QMainWindow 时退出时出现 QT 应用程序段错误

c++ - 在二维数组 C++ 中读取图像并保存

c++ - C++ 中的多线程......从哪里开始?

c++ - 在类特化中具有任何标签的枚举类型

c++ - 使用线程池 boost asio 多线程 tcp 服务器

c++ - 从 vb.net 在 C++ dll 函数中传递参数

c++ - 在类中为变量分配方法值

c++ - C++ 的 Apple mach-o 链接器 (id) 错误

c++ - Qt信号槽重复代码避免

c++ - 需要更好地理解带有 Windows API 的智能指针