【发布时间】:2019-11-29 23:29:06
【问题描述】:
我正在尝试声明和初始化一个 unique_ptr 持有一个类数组
这是我用来解决项目内存管理问题的示例。我可以声明指针,但我无法初始化它。
class CrewMember
{
};
class SpaceShip
{
// generates error
std::unique_ptr<CrewMember[3][3]> ship_crew_members = std::make_unique< new CrewMember[3][3]>;
// compiles fine
std::unique_ptr<CrewMember[3][3]> ship_crew_members;
};
收到的错误:
调用非 constexpr 函数 'void* operator new ' std::unique_ptr ship_crew_members = std::make_unique;
^
无法基于转换为“std::unique_ptr”类型来解析重载函数“make_unique” std::unique_ptr ship_crew_members = std::make_unique;
【问题讨论】:
-
make_unique是一个函数模板。你需要做make_unique<Type>()。 -
std::make_unique< new CrewMember[3][3]>90% 肯定你不能在这种情况下使用new。 -
另外,它应该更像
std::make_unique<CrewMember[3][3]>(),虽然我不确定这是否完全正确。 -
@L.F.和奇普斯特我会试一试。感谢您的快速回复!
-
试过这个:
cpp std::unique_ptr<CrewMember[3][3]> ship_crew_members = std::make_unique< CrewMember[3][3]>();收到pastebin.com/Kma1Q4S8
标签: c++ smart-pointers