gpt4 book ai didi

c++ - 引用和 auto_ptr

转载 作者:行者123 更新时间:2023-11-30 01:32:57 25 4
gpt4 key购买 nike

如果我有一个 auto_ptr,我可以将它传递给引用吗?比如:

auto_ptr<MyClass>Class(new MyClass);
void SetOponent(MyClass& oponent);
//So I pass SetOponent(Class)

auto_ptr 的奇怪复制行为是什么?

最佳答案

不,你不能,你必须取消引用它:

SetOponent( * Class )

至于复制行为,我建议您阅读一本关于 C++ 的好书,例如 Scott Meyers 的 Effective C++。 auto_ptr 的复制行为非常不直观,可能超出了 SO 答案的范围。然而,没有任何冒险......

复制 auto_ptr 时,所有权从原件转移到拷贝。例如:

auto_ptr <Foo> p1( new Foo ); 

此时 p1 拥有指向 Foo 对象的指针。

auto_ptr <Foo> p2( p1 ); 

复制后,p2 拥有该指针,p1 已更改,因此它现在拥有一个 NULL 指针。这很重要,因为在 C++ 中很多地方都会发生复制。例如,您永远不应按值将 auto_ptr 传递给函数,或尝试将它们存储在标准库容器中。

关于c++ - 引用和 auto_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/802784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com