Cpp 对象模型探索 / 程序转化语义
生活随笔
收集整理的這篇文章主要介紹了
Cpp 对象模型探索 / 程序转化语义
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、定義時初始化
源碼
#include <iostream> using namespace std;class A { public:A(){std::cout << "構造函數" << std::endl;}~A(){std::cout << "析構函數" << std::endl;} public:A(const A &obj){std::cout << "拷貝構造函數" << std::endl;} };int main() {A a1;A a2 = a1;return 0; }上述代碼中,
A a2 = a1;執行 A 的拷貝構造函數。從編譯器的角度來看,其實際的過程如下:
A a2; // 此時不調用 A 的構造函數,只是單純的申請了 sizeof(A) 大小的內存。 a2.A::A(a1); // 調用 A 的拷貝構造函數,完成 a2 的初始化。二、參數的初始化
繼續使用上述代碼中的類 A ,源碼如下:
void func(A tmp) { }int main() {A a1;func(a1);return 0; }?結果:
構造函數 拷貝構造函數 析構函數 析構函數過程和第一個是一樣的。?
三、返回值初始化
繼續使用上述代碼中的類 A ,源碼如下:
A func() {A tmp;return tmp; }int main() {A a = func();return 0; }結果:
構造函數 拷貝構造函數 析構函數 析構函數從編譯器角度上看,其過程如下:
A a; // 此時不調用 A 的構造函數,只是單純的申請了 sizeof(A) 大小的內存。func 函數變成了如下形式: void func(A &a) {A tmp; // 執行 A 的構造函數。a.A::A(tmp); // 執行 a 的拷貝構造函數。 }?
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的Cpp 对象模型探索 / 程序转化语义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL / 为什么需要主键?主键为什
- 下一篇: Cpp 对象模型探索 / 拷贝构造函数