本例子来自于学习视频,不是原创。
#include<iostream> using namespace std; class Test { private: int value; public: Test() { value = 0; cout << "defult create Test:" << this << endl; } Test(int t) { value = t; cout << "Create the Test:" << this << endl; } Test (const Test& it) { value = it.value; cout << "Copy create the test:" << this << endl; } Test & operator=(const Test& it) { value = it.value; cout << this << " = " << &it << endl; return *this; } ~Test() { cout << "Destory the Test:" << this << endl; } int get_value() { return value; } }; Test fun(Test tp) { int x = tp.get_value(); Test tmp(x); return tmp; } int main() { Test t1(10); Test t2; //Test t3(); //虽然没错,但是创建不了对象,因为规定是若要 //调用默认的构造函数,则不需要括号,用括号会变成函数声明; t2 = fun(t1); cout << "main end!" << endl; return 0; }
<pre name="code" class="cpp">/*1未优化前 Test fun(Test tp)//传值操作浪费时间和空间,所以换为引用 { int x = tp.get_value(); Test tmp(x); return tmp; } */ /*2对参数传递的优化 Test fun(const Test& tp)//传值操作浪费时间和空间,所以换为引用 //且由于tp不能改变,我们可以加上const。这样可以明显减少时间空间上 { int x = tp.get_value(); Test tmp(x); return tmp; } */ //3对返回值的优化 Test fun(const Test & tp) { int x = tp.get_value(); //Test tmp(x); //return tmp; return Test(x); //这里直接调用构造函数来进行构造一个无名对象进行传值, //这样系统就不会再创建一个临时变量来存储对象进行传值操作 }
【C++系列经典例子】C++默认构造,拷贝,赋值,析构四函数
原文地址:http://blog.csdn.net/u010518261/article/details/44958259