我通过引用测试本地对象的返回(希望它是未定义的行为,以符合我在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;
}
Run Code Online (Sandbox Code Playgroud)
我的控制台打印"从...返回"然后"复制"然后打印一个随机值.
我对引用传递的理解是它不需要复制.为什么它不按我的预期行事?
编辑:不要返回对本地对象的引用,因为它将在函数外部被销毁.我只是测试看它实际上是这样发生的.
MyInt ain MyInt a = returnref();不是引用,所以应该初始化.这就是调用复制构造函数的原因.并且您不应该返回对临时对象的引用(MyInt a(10)在堆栈上分配并在退出函数时将被销毁),这将导致未定义的行为.
| 归档时间: |
|
| 查看次数: |
1482 次 |
| 最近记录: |