匿名对象就是无名对象,匿名对象只能充当右值,所以匿名对象拷贝必须存在移动拷贝,或者准备一个ecosnt限定普通拷贝构造函数。
#include构造和析构顺序问题#include using namespace std; class MM { public: MM() {}; MM(string name, int age) { m_name = name; m_age = age; } void printMM() { cout << m_name << "t" << m_age << endl; } MM(MM& object) { m_name = object.m_name; m_age = object.m_age; } //移动构造--->新标准的 MM(MM&& object) { m_name = object.m_name; m_age = object.m_age; cout << "调用移动构造" << endl; } ~MM() { cout << "析构打印name:" << m_name << endl; } private: string m_name; int m_age; }; MM returnMM(string name, int age) { return MM(name, age); //构造一个匿名对象当做函数返回值 } int main() { { MM girl("girl", 19); //匿名对象是一个右值 MM mm=MM("mm", 29); //匿名对象 --->匿名对象转正 ,mm接管所有权 cout << "匿名对象已死亡" << endl; } MM beauty = returnMM("返回值", 18); beauty.printMM(); return 0; }
-
一般情况构造顺序和析构是相反的
-
静态的和全局的是最后释放的
-
delete 立刻调用析构函数
#include#include using namespace std; class Test { public: Test(string data = "A") { m_Data = data; cout << m_Data; } ~Test() { cout << m_Data; } protected: string m_Data; }; int main() { { Test t1; static Test t2("B"); Test array[3]; Test* p = new Test("C"); delete p; p = nullptr; //ABAAACCAAAB } return 0; }



