首页 > 解决方案 > 有没有办法自动初始化一个 std::shared_ptr 来保存一个有效的对象?

问题描述

当我写

std::shared_ptr<MyType> x;

x 使用指向 nullptr 的空共享指针进行初始化。但我希望它自动调用 MyType 的默认(或其他一些指定的构造函数)。我知道,我可以写:

std::shared_ptr<MyType> x = std::maked_shared<MyTYpe>();

但有时人们会忘记然后你会遇到麻烦,所以编译器强制执行这个会很好。

标签: c++constructorstdshared-ptr

解决方案


您可以创建一个类,例如:

template <typename T>
struct defaulted_shared_ptr : std::shared_ptr<T>
{
    using std::shared_ptr<T>::shared_ptr;
    defaulted_shared_ptr() : std::shared_ptr<T>(std::make_shared<T>()) {}
};

然后

defaulted_shared_ptr<Foo> foo;

将包含一个默认构造Foo

演示


推荐阅读