看如下代码:
#include<iostream> class TestConstructor { public: TestConstructor() { std::cout<<"TestConstructor()"<<std::endl; } ~TestConstructor() { std::cout<<"~TestConstructor()"<<std::endl; } TestConstructor(const TestConstructor& testObj) { std::cout<<"TestConstructor(const TestConstructor&)"<<std::endl; } TestConstructor& operator = (const TestConstructor& testObj) { std::cout<<"TestConstructor& operator = (const TestConstructor& testObj)"<<std::endl; return *this; } }; TestConstructor testFunc() { TestConstructor testInFunc; //3、调用TestConstructor() 生成对象testInFunc return testInFunc; //4、调用TestConstructor(const TestConstructor&) 生成临时对象 //5、调用析构函数,析构对象testInFunc } int main() { TestConstructor test; //1、调用TestConstructor() 生成对象test test = testFunc(); //2、调用testFunc() //6、调用等号把临时对象复制给对象test //7、调用析构函数,析构临时对象 return 0; //8、调用析构函数,析构对象test }
看输出:
有注释,有输出。执行细节,一目了然了吧