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)
使用初始化列表:
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(并在必要时使解构器成为虚拟).
| 归档时间: |
|
| 查看次数: |
1642 次 |
| 最近记录: |