gpt4 book ai didi

c++ - 在 C++ 中,不允许将对象直接传递给函数吗?

转载 作者:太空宇宙 更新时间:2023-11-04 14:42:31 24 4
gpt4 key购买 nike

我知道 C,但我不擅长 C++。

下面的代码会崩溃(在getval()中,使用引用作为参数是可以的)。*p 的值在第一个 cout 语句之后改变。看起来有一些由内存越界导致的覆盖。

我的问题是为什么它崩溃了(或者为什么它的值被改变了)。它是对象的“按值调用”,所以它应该仍然有效吗?

class myclass { 
int *p;

public:
myclass(int i);
~myclass() { delete p; }
int getval(myclass o);
};

myclass::myclass(int i)
{
p = new int;

if (!p) {
cout << "Allocation error\n";
exit(1);
}

*p = i;
}

int myclass::getval(myclass o)
{
return *o.p;
}

int main()
{
myclass a(1), b(2);

cout << a.getval(a) << " " << a.getval(b) << endl;
cout << b.getval(a) << " " << b.getval(b) << endl;

return 0;
}

最佳答案

继续阅读 the rule of three .

本质上,您的代码不支持按值复制。

因此动态分配的内存被过早地释放(由析构函数)。

干杯,

关于c++ - 在 C++ 中,不允许将对象直接传递给函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7818232/

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