我在使用 GCC 4.8.4 的 Ubuntu 14.04 上,我的代码类似于以下内容:
std::shared_ptr<MyClass> my_shared_object = set elsewhere...
MyFunction(*my_shared_object);
WhereMyFunction
的签名如下所示:
void MyFunction(const MyClass& my_object)
完整的代码可以在这里找到
但是,我发现 my_object 实际上超出了MyFunction
. 我的想法是,my_shared_object
只有在超出范围后才会释放其内容,这意味着在MyFunction
返回之后。我不确定我是不是误解std::shared_ptr
了,或者这可能是一个 GCC 错误。
我想问题归结为:当我取消引用 std::shared_ptr 时,这是否保证std::shared_ptr
只要使用取消引用,它就会持续存在?