处理构造函数时的智能指针

时间:2015-06-05 05:30:03

标签: c++ constructor smart-pointers

这个问题与我的计划有关。我之前使用指针手动管理,现在我试图转向智能指针(出于所有原因)。

在普通指针中,使用 new 关键字很容易调用类的构造函数。就像下面的程序一样:

Button * startButton;

startButton = new Button(int buttonID, std::string buttonName);

使用智能指针时,调用类的构造函数的替代方法是什么。我在下面所做的就是错误:

std::unique_ptr<Button> startButton;

startButton = std::unique_ptr<Button>(1, "StartButton"); // Error

我得到的错误如下:

Error   2   error C2661: 'std::unique_ptr<Button,std::default_delete<_Ty>>::unique_ptr' : no overloaded function takes 2 arguments

2 个答案:

答案 0 :(得分:4)

std::unique_ptr是指针的包装器,因此要创建std::unique_ptr的正确对象,您应该将指针传递给它的构造函数:

startButton = std::unique_ptr<Button>(new Button(1, "StartButton"));

从C ++ 14开始,还有一个辅助函数make_unique,它可以为你做这个分配:

startButton = std::make_unique<Button>(1, "StartButton");

如果可用,请使用std::make_unique,因为它更容易阅读,在某些情况下使用它比直接使用new更安全。

答案 1 :(得分:1)

如果您的编译器支持C ++ 14,则可以使用:

startButton = std::make_unique<Button>(1, "StartButton");

如果您只能使用C ++ 11,则需要使用:

startButton = std::unique_ptr<Button>(new Button(1, "StartButton"));