1.用類的一個實例化對象去初始化另一個對象的時候
2.函數的參數是類的對象時(非引用傳遞)
3.函數的返回值是函數體內局部對象的類的對象時 ,此時雖然發生(Named return Value優化)NRV 優化,但是由於返回方式是值傳遞,所以會在返回值的地方調用拷貝構造函數
另:第三種情況在Linux g++ 下則不會發生拷貝構造函數,不僅如此即使返回局部對象的引用,依然不會發生拷貝構造函數
總結就是:即使發生NRV優化的情況下,Linux+ g++的環境是不管值返回方式還是引用方式返回的方式都不會發生拷貝構造函數,而Windows + VS2019在值返回的情況下發生拷貝構造函數,引用返回方 式則不發生拷貝構造函數。
在c++編譯器發生NRV優化,如果是引用返回的形式則不會調用拷貝構造函數,如果是值傳遞的方式依 然會發生拷貝構造函數。
