【发布时间】:2015-12-15 06:36:12
【问题描述】:
我开发了简单的 c++ 类来测试 c++ 对象何时销毁;现在我有一个问题,当一个对象通过函数返回时,c++ 创建一个新对象并返回它,当返回引用销毁对象时我的错误是什么?
简单的类附在下面。
#include <iostream>
using namespace std;
static int freeCounter=0;
class TestCopy {
private:
string pStr;
public:
TestCopy(const TestCopy &obj){
pStr=obj.pStr;
}
TestCopy(string &test){
pStr=test;
}
~TestCopy(){ freeCounter++; cout << freeCounter <<"\t" << pStr << endl; }
TestCopy get(){
TestCopy x=*this;
return TestCopy(x); // -> TestCopy(x) is first destroy in result
}
string getStr(){
return pStr;
}
};
int main(){
string xstr="test";
TestCopy x(xstr); // x is third destroy
TestCopy x2=x.get(); // x2 is second destroy
cout << x.getStr() << endl;
return 0;
}
结果
1 test
test
2 test
3 test
【问题讨论】:
-
问题是这些
TestCopy都不是动态分配的,所以当超出范围时它们会被销毁。 -
你必须明确表示你在函数签名
TestCopy& get(){中返回一个引用,注意我添加的'&' -
不完全正确,@Rodolfo。复制省略将在返回问题上处理复制构造,并返回一个本地作为引用将在 MohsenTi 的脸上爆炸,因为返回的引用将不再存在。 Moe 复制省略:stackoverflow.com/questions/12953127/…
-
return *this;将是最简单、最有效的方法。
标签: c++ object reference destroy