1. 程式人生 > >記一次源碼分析

記一次源碼分析

環境 space () esp clu pac 返回對象 對象 單步調試

首先分析一段很短的代碼

#include<iostream>
#include<vector>
using namespace std;

vector<int> getdata(){
    vector<int> v{2,3,4,5,6};
    // return std::move(v);
    return v;
}

int main()
{
    //vector<int> temp(getdata());
   auto b=begin(getdata());
   cout<<*b;
   //以下方式輸出正常
   for(auto i: getdata()){
      cout<<i;
   }
return 0; }

這段代碼是錯的,裏面出現了一個很容易犯得bug/如果函數中有建立本地對象並需要返回時,只能返回對象,不能返回指針或引用,因為函數調用完後,這個對象也就會隨之進行析構(釋放),但是如果我們試著返回一個vector的本地對象時然後對這個本地對象直接調用begin()函數得到的卻不是我們想要的,然後我就去單步調試了/去挑戰

//說明環境 我用的是mingw編譯器 g++

首先分配內存,這個肯定不用多說

記一次源碼分析