C++ 函數返回對象時並沒有調用拷貝構造函數


#include <iostream>
#include <vector>
#include <string.h>
 
using namespace std;
 
class CTest {
public:
    CTest() {
        cout << "CTest construct" << endl;
        data = new char[10];
        strncpy(data, "hello", 10);
    }   
    
    CTest(const CTest& test) {
        cout << "copy contruct" << endl;
        data = new char[10];
        memcpy(data, test.data, 10);
    }   
 
    ~CTest() {
        cout << "CTest destruct" << endl;
        delete data;
        data = NULL;
    }   
 
public:
        char *data;
};
 
 
CTest GetTest() {
    CTest test;
    return test;
}
 
int main(int argc, char** argv) {
    
    GetTest();
    return 0;
}

執行結果如下:

並沒有進行對象拷貝操作,與預期不符,Why?

其原因是:RVO(return value optimization),被G++進行值返回的優化了,具體的RVO的相關技術,可以進行百度。

我們可以將RVO優化關閉,可以對g++增加選項-fno-elide-constructors,重新編繹之后,

執行結果如下:

轉載自:https://blog.csdn.net/dreamvyps/article/details/79154321


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM