【发布时间】:2020-07-28 08:57:44
【问题描述】:
假设我们有
void UsePointer (auto_ptr <CSomeClass> spObj)
{
spObj->DoSomething();
}
我们有一个主函数:
int main()
{
auto_ptr <CSomeClass> spObject (new CSomeClass ());
UsePointer (spObject);
// spObject->DoSomthing (); would be invalid.
}
书上说“对象在 UsePointer() 返回时被销毁,因为变量 spObj 超出范围,因此被销毁”
我的问题是:
- 传递到 UsePointer 函数时是否复制了指针?因此所有权转移?
- 如果不希望 spObject 被破坏,我需要做什么?我需要通过引用传递这个指针吗?
这本书也有点过时了 - c++ 11 中的 unique_ptr 也一样吗?
【问题讨论】:
-
忘记
std::auto_ptr曾经存在过。只是很糟糕。 -
@Yksisarvinen 如果我们将 auto_ptr 更改为 unique_ptr,std::unique_ptr 的行为是否相同?
-
无论您使用的是 auto_ptr 还是 unique_ptr,如果您不更改引用计数,则没有理由将其传递给函数。只传递原始指针更有效。另请参阅herbsutter.com/2013/06/05/…,是的,我同意@Yksisarvinen,不要使用 auto_ptr
-
关于您的问题 -
unique_ptr不会编译 snd 报告和错误。unique_ptr顾名思义是“唯一的”,同一个对象不能有两个 unique_ptr。shared_ptr有引用计数器,可以复制。
标签: c++ smart-pointers unique-ptr auto-ptr