gpt4 book ai didi

c++ - 传递给函数时c++ auto_ptr被破坏

转载 作者:行者123 更新时间:2023-12-01 14:38:58 26 4
gpt4 key购买 nike

假设我们有

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是否也一样?

    最佳答案

    Is the pointer copied when passed into UsePointer function? Hence the owernship is transferred?


    是。除非函数参数是引用限定的,否则参数将按值传递。对于涉及复制并因此传递所有权的 auto_ptr

    What do I need to if want spObject not be destroyed? Do I need to pass this pointer by reference?


    你可以。但是更好的是,传递对对象本身的引用。除非涉及所有权的操纵,否则函数不应接受智能指针。如果只需要对pointee进行操作,请接受 CSomeClass const&并传递 *spObject

    Also this book is a bit outdated - does the same hold for unique_ptr in c++ 11?


    是。区别在于 unique_ptr是不可复制的,因此无法隐式地放弃其所有权。要传递 unique_ptr,必须将其显式移动。将指针传递到函数中的代码中 std:move的出现提供了所有权更改的明显视觉提示。

    关于c++ - 传递给函数时c++ auto_ptr被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63130488/

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