什么相当于以下内容:
std::vector<Foo*> vec;
vec.push_back(NULL);
Run Code Online (Sandbox Code Playgroud)
什么时候处理boost::shared_ptr?它是以下代码吗?
std::vector< boost::shared_ptr<Foo> > vec;
vec.push_back(boost::shared_ptr<Foo>());
Run Code Online (Sandbox Code Playgroud)
注意:我可能会推回很多这样的对象.我应该在nullPtr某处声明一个全局静态对象吗?这样只需要构建其中一个:
boost::shared_ptr<Foo> nullPtr;
Run Code Online (Sandbox Code Playgroud) 我想知道.reset()共享指针有什么作用。它是简单地将共享指针的引用计数减一,如此处所述,还是删除对象的所有引用计数,将计数重置为 0
这是我的代码示例
std::vector<boost::shared_ptr<foo>> vec;
boost::shared_ptr<foo> f(boost::make_shared<foo>()); //ref count 1
vec.push_back(f); //ref count 1
vec.push_back(f); //ref count 3
int a = f.use_count(); //Will return 3
f.reset(); //Will turn the refernece count to 0
vec[1].reset(); //Will reduce the reference count by 1.
a = f.use_count();
Run Code Online (Sandbox Code Playgroud)
我很好奇为什么这样做f.reset()会将引用计数变为 0,同时vec[1].reset()将引用计数减少 1