Init var没有复制构造函数

Max*_*rai 1 c++ constructor copy init

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

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

错误1:initializing argument 1 of ‘Window::Window(WindowHandle, const sf::WindowSettings&)’

错误2:‘NonCopyable& NonCopyable::operator=(const NonCopyable&)’ is private

但它以这种方式工作:

Window obj(/* constructor params */);
Run Code Online (Sandbox Code Playgroud)

str*_*ger 6

使用初始化列表:

class MyClass
{
   Window obj; // Hasn't copy constructor
   public:
      MyClass() :
         obj(/* constructor params */)
      {
      }
}
Run Code Online (Sandbox Code Playgroud)

这也适用于参考.您可以在初始化列表中分配任何成员变量.但它只适用于构造函数.

如果您希望它在构造函数外部工作,则需要使用指针:

class MyClass
{
   Window *obj;
   public:
      void init()
      {
         obj = new Window(/* constructor params */);
      }
}
Run Code Online (Sandbox Code Playgroud)

确保在解构器中释放obj使用delete(并在必要时使解构器成为虚拟).