gpt4 book ai didi

c++ - 带有 boost::shared_ptr 的空指针?

转载 作者:IT老高 更新时间:2023-10-28 13:24:19 24 4
gpt4 key购买 nike

下面的等价物是什么:

std::vector<Foo*> vec;
vec.push_back(NULL);

在处理 boost::shared_ptr 时?是下面的代码吗?

std::vector< boost::shared_ptr<Foo> > vec;
vec.push_back(boost::shared_ptr<Foo>());

注意:我可能会推回很多这样的对象。我应该在某处声明一个全局静态 nullPtr 对象吗?这样就只需要构建其中一个:

boost::shared_ptr<Foo> nullPtr;

最佳答案

您的建议(调用不带参数的 shared_ptr<T> 构造函数)是正确的。 (调用值为 0 的构造函数是等效的。)我认为这不会比调用 vec.push_back() 慢。与预先存在的 shared_ptr<T> ,因为在这两种情况下都需要构造(直接构造或复制构造)。

但如果你想要“更好”的语法,你可以试试下面的代码:

class {
public:
template<typename T>
operator shared_ptr<T>() { return shared_ptr<T>(); }
} nullPtr;

这声明了一个全局对象 nullPtr ,它启用以下自然语法:

shared_ptr<int> pi(new int(42));
shared_ptr<SomeArbitraryType> psat(new SomeArbitraryType("foonly"));

...

pi = nullPtr;
psat = nullPtr;

请注意,如果您在多个翻译单元(源文件)中使用它,您需要为类命名(例如 _shared_null_ptr_type ),移动 nullPtr 的定义对象到一个单独的 .cpp 文件,并添加 extern定义类的头文件中的声明。

关于c++ - 带有 boost::shared_ptr 的空指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/621220/

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