c++ - 没有复制构造函数的初始化变量

标签 c++ constructor copy init

我有一些没有复制构造函数的类(Window)(它是私有(private)的)。我无法理解如何在我自己的类中初始化此类的 var:

class MyClass
{
   Window obj; // Hasn't copy constructor
   public:
      void init()
      {
         obj = Window(/* constructor params */); // [error]
         obj(/* constructor params */); // [error]
      }
}

错误 1:正在初始化“Window::Window(WindowHandle, const sf::WindowSettings&)”的参数 1

错误 2:'NonCopyable& NonCopyable::operator=(const NonCopyable&)' 是私有(private)的

但它是这样工作的:

Window obj(/* constructor params */);

最佳答案

使用 initializer list :

class MyClass
{
   Window obj; // Hasn't copy constructor
   public:
      MyClass() :
         obj(/* constructor params */)
      {
      }
}

这也适用于引用。您可以在初始化列表中分配任何成员变量。不过,它仅适用于构造函数。

如果你想让它在构造函数之外工作,你需要使用指针:

class MyClass
{
   Window *obj;
   public:
      void init()
      {
         obj = new Window(/* constructor params */);
      }
}

确保在解构函数中使用delete 释放obj(必要时将解构函数设为虚拟)。

关于c++ - 没有复制构造函数的初始化变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2935173/

相关文章:

java - 为什么还可以使用空白构造函数?

javascript - Obj 构造函数中的 AJAX 回调

xcode - 如何在 Xcode 和其他文件中同时复制 .h 和 .m 文件?

PostgreSQL - 复制自 - "unacceptable encoding"错误

c++ - CPP 程序不运行

c++ - 我如何在 xcode 上使用 valgrind?

c++ - 元编程继承限制

php - 如何对构造函数接受一些参数的类的方法进行单元测试?

multidimensional-array - 有没有一种好方法可以在使用rust 的 ndarray 中进行重叠复制?

c++ - Blackmagic 帧 : convert from yuv to RGB to use in openCV