gpt4 book ai didi

c++ - 即使通过引用返回时也会调用复制构造函数?

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:12 24 4
gpt4 key购买 nike

我正在通过引用测试本地对象的返回(希望这是未定义的行为,以符合我在 Effective C++ 中的阅读)。我最初的测试进行得很顺利,但发生了一些意外的事情。

#include <iostream>

using namespace std;

class MyInt {
public:
MyInt(int i){
value = new int(i);
}
~MyInt(){
delete value;
}
int getValue(){
return *value;
}
MyInt(const MyInt &b){
cout<<"Copy"<<endl;
}
private:
int* value;
};

MyInt& returnref(){
MyInt a(10);
cout<<"Returning from returnref()"<<endl;
return a;
}

int main(){
MyInt a = returnref();
cout<<a.getValue()<<endl;
return 0;
}

我的控制台打印“Returning from ...”,然后是“Copy”,然后是一个随机值。

我对pass by reference的理解是不需要做任何copy。为什么它没有按照我的预期进行?

编辑:不要返回对本地对象的引用,因为它已经在函数外被销毁了。我只是在测试它是否确实以这种方式发生。

最佳答案

MyInt a = returnref(); 中的

MyInt a 不是引用,所以应该初始化。这就是复制构造函数被调用的原因。并且您不应该返回对临时对象的引用(MyInt a(10) 分配在堆栈上并将在函数退出时销毁),它会导致未定义的行为。

关于c++ - 即使通过引用返回时也会调用复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4524704/

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