【发布时间】:2016-01-02 12:55:55
【问题描述】:
在这个例子中,我取自《超越 C++ 标准库 - Boost 简介》一书:
boost::shared_ptr<A> createA()
{
boost::shared_ptr<A> p(new B()); // B is a class
return p;
}
int main()
{
typedef std::vector<boost::shared_ptr<A> > container_type;
container.push_back(createA()); /* before returning p does the reference count reach 2 ? */
assert(container[0].use_count() == 1); // true
}
我想知道“p”内部的引用计数器是否可以达到最大值 2:1 当我们创建共享指针“p”和 2 在返回(复制)其值后销毁“p”之前...
我的问题的目的是知道当我们有一个返回 shared_ptr 的函数时哪个选项更好:返回一个 shared_ptr 对象或对动态创建的 shared_ptr 的引用。测试后:
boost::shared_ptr<A>& createA()
{
boost::shared_ptr<A> &p = *(new boost::shared_ptr<A>(new B));
assert(p.use_count() == 1);
return p;
}
/* ... */
boost::shared_ptr<A> & tmp_ref = createA();
assert(tmp_ref.use_count() == 1);
container.push_back(tmp_ref);
assert(container[0].use_count() == 2);
我可以说返回一个对象更可取,因为在另一种情况下,引用计数是 2,这是逻辑(1 因为我们创建了 shared_ptr dynamiccaly,2 因为向量复制了它)。
【问题讨论】:
-
复制省略让人难以预测。它可能会也可能不会。
标签: c++ boost shared-ptr