有没有办法自动初始化一个 std::shared_ptr 来保存一个有效的对象?
Is there a way to automatically initialize a std::shared_ptr to hold a valid object?
写的时候
std::shared_ptr<MyType> x;
x 使用指向 nullptr 的空共享指针进行初始化。但我希望它自动调用 MyType 的默认值(或其他指定的构造函数)。我知道,我可以写:
std::shared_ptr<MyType> x = std::maked_shared<MyTYpe>();
但有时人们会忘记,然后您 运行 就会遇到麻烦,因此由编译器强制执行此操作会很好。
您可以创建一个 class,类似于:
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
写的时候
std::shared_ptr<MyType> x;
x 使用指向 nullptr 的空共享指针进行初始化。但我希望它自动调用 MyType 的默认值(或其他指定的构造函数)。我知道,我可以写:
std::shared_ptr<MyType> x = std::maked_shared<MyTYpe>();
但有时人们会忘记,然后您 运行 就会遇到麻烦,因此由编译器强制执行此操作会很好。
您可以创建一个 class,类似于:
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