gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 16:09:07 26 4
gpt4 key购买 nike

这个问题是关于我的程序的。我之前使用指针进行手动管理,现在我正尝试转向智能指针(出于所有充分的理由)。

在普通指针中,使用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

最佳答案

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 更安全直接。

关于c++ - 处理构造函数时的智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30658957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com