鉴于此类是enable_shared_from_this:
class connection : public std::enable_shared_from_this<connection>
{
//...
};
std::shared_ptr
假设我创建了两个from 的实例 ,connection*
如下所示:
std::shared_ptr<connection> rc(new connection);
std::shared_ptr<connection> fc(rc.get(), [](connection const * c) {
std::cout << "fake delete" << std::endl;
});
到目前为止它很好,因为资源 { connection*
} 由一个人 shared_ptr
拥有——rc
准确地说,fc
只是有一个假删除器。
之后,我这样做:
auto sc = fc->shared_from_this();
//OR auto sc = rc->shared_from_this(); //does not make any difference!
现在哪个shared_ptr
-rc
或fc
- 将sc
与它共享它的引用计数?换句话说,
std::cout << rc->use_count() << std::endl;
std::cout << fc->use_count() << std::endl;
这些应该打印什么?我测试了这段代码,发现 rc
似乎只有.2
fc
1
我的问题是,为什么会这样?正确的行为及其理由应该是什么?
我正在使用 C++11 和 GCC 4.7.3。