【发布时间】:2018-05-11 07:50:06
【问题描述】:
当我写作时
std::shared_ptr<MyType> x;
x 使用指向 nullptr 的空共享指针进行初始化。但我希望它自动调用 MyType 的默认值(或其他一些指定的构造函数)。我知道,我可以写:
std::shared_ptr<MyType> x = std::maked_shared<MyTYpe>();
但有时人们会忘记然后你会遇到麻烦,所以由编译器强制执行会很好。
【问题讨论】:
-
这就像要求
int *p;自动分配一个整数。不确定这是个好主意。 -
没有。您必须创建自己的共享指针类,可能将其称为
never_null_shared_ptr,并可能使用底层std::shared_ptr来实现。 -
再想一想:你要求让
shared_ptr的行为不像shared_ptr。这显然是不可能的。当T是您的特殊类型时,它会破坏使用shared_ptr<T>的有效模板代码,它假定shared_ptr的行为符合标准中的规定。 -
@YSC 这可能编译但值得解决的是,就标准 C++ 而言,它具有未定义的行为。
-
如果智能指针永远不应该有一个空值,你为什么首先使用智能指针?你不能使用引用(或只是对象本身)吗?
标签: c++ constructor std shared-ptr