gpt4 book ai didi

c++ - 当 auto_ptr 是它的参数时如何调用函数!

转载 作者:搜寻专家 更新时间:2023-10-31 01:56:54 25 4
gpt4 key购买 nike

#include <iostream>
#include <memory>

class test
{
private:
int x , y;
public:
test(int a , int b):x(a),y(b){}
void fun()
{
std::cout<< x<<" "<<y<<" "<<std::endl;
}
};

void show(std::auto_ptr<test> t1)
{
t1->fun();
}

int main()
{

show(new test(3,4));

}

我遇到编译错误,请告诉我这段代码有什么问题?提前致谢。

最佳答案

无论何时动态分配对象,都应该创建一个命名 智能指针,它会立即取得该对象的所有权,然后使用该命名智能指针。例如,

std::auto_ptr<test> ptr(new test(3, 4));
show(ptr);

您不能将 new test(3, 4) 直接传递给函数,因为必须显式构造 std::auto_ptr 对象;如果智能指针隐式获得对象的所有权,那将是非常出乎意料的。

也就是说,无论如何这都是相当不寻常的,因为当您调用 show() 时,auto_ptr 会被复制,而当 auto_ptr 被“复制”时,"原始对象失去所有权,拷贝获得所有权(因此,调用 show() 后,您会发现 ptr 不再拥有该对象的所有权。

关于c++ - 当 auto_ptr 是它的参数时如何调用函数!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6379508/

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