当前位置:  开发笔记 > 编程语言 > 正文

带有boost :: shared_ptr的NULL指针?

如何解决《带有boost::shared_ptr的NULL指针?》经验,为你挑选了3个好方法。

什么相当于以下内容:

std::vector vec;
vec.push_back(NULL);

什么时候处理boost::shared_ptr?它是以下代码吗?

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

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

boost::shared_ptr nullPtr;

j_random_hac.. 52

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

但是如果你想要"更好"的语法,你可以尝试以下代码:

class {
public:
    template
    operator shared_ptr() { return shared_ptr(); }
} nullPtr;

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

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

...

pi = nullPtr;
psat = nullPtr;

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



1> j_random_hac..:

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

但是如果你想要"更好"的语法,你可以尝试以下代码:

class {
public:
    template
    operator shared_ptr() { return shared_ptr(); }
} nullPtr;

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

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

...

pi = nullPtr;
psat = nullPtr;

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



2> Larry Gritz..:

嗯,这是合法的:

shared_ptr foo;  /* don't assign */

在这种状态下,它并没有指向任何东西.你甚至可以测试这个属性:

if (foo) {
    // it points to something
} else {
    // no it doesn't
}

那么为什么不这样做:

std::vector < shared_ptr > vec;
vec.push_back (shared_ptr);   // push an unassigned one



3> bdonlan..:

在C++ 0x中,您只需转换nullptrstd::shared_ptr:

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

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有