【发布时间】:2013-06-13 13:12:50
【问题描述】:
我仍然很难理解为什么
void work_with_foo(shared_ptr<foo> _foo);
相比
不推荐void work_with_foo(foo* _foo)
我理解work_with_foo(foo& _foo)更好,但是一个指针作为参数!如果有人打电话给delete _foo怎么办?
谁能解释一下为什么?
我总是使用shared_ptr,例如,在我的代码中...
shared_ptr<foo> ptr_foo(new foo);
//calling work_with_foo which takes foo pointer
work_with_foo(ptr_foo); //will this even work?
【问题讨论】:
-
秋千和环形交叉路口 - 应允许函数假定其参数在调用期间保持有效。
-
这将为您的问题提供广泛的答案:Herb Sutter: GotW #92, Smart Poitners as Parameters
-
"如果有人打电话给
delete _foo怎么办?"如果有人在您的shared_ptr上拨打delete _foo.get()怎么办?在始终使用智能指针的代码库中,应该理解原始指针永远不会拥有所有权 - 它们用作可能为空的引用,或者用作原始数组的迭代器。没有别的了。
标签: c++ shared-ptr