直接调用构造函数将长生一个临时对象
临时对象的声明周期只有一条语句的时间
临时对象的作用域只在一条语句中
临时对象是C++中值得警惕的灰色地带
有趣的实验
#includeclass Test { int mi; public: Test(int i) { mi = i; } Test() { Test(0); } void print() { printf("mi = %dn", mi); } }; int main() { Test t; t.print(); return 0; }
解决方案如下:使用普通函数初始化
#includeclass Test { int mi; void init(int i) { mi = i; } public: Test(int i) { init(i); } Test() { init(0); } void print() { printf("mi = %dn", mi); } }; int main() { Test t; t.print(); return 0; }
重点:
#includeclass Test { int mi; public: Test(int i) { printf("Test(int i) : %dn",i); mi = i; } Test(const Test& t) { printf("Test(const Test& t) : %dn", t.mi); mi = t.mi; } Test() { printf("Test()n"); } void print() { printf("mi = %dn", mi); } ~Test() { printf("~Test()n"); } }; Test func() { return Test(20); } int main() { //如果没有C++编译器优化,下面代码如何调用 //1.生成临时对象 2.用临时对象初始化 t 对象 3.调用拷贝构造函数 Test t = Test(10); // ==> Test t = 10; Test tt = func(); // ==> Test tt = Test(20); ==> Test tt = 20; t.print(); tt.print(); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)