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

記一次原始碼分析

首先分析一段很短的程式碼 

#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++

首先分配記憶體,這個肯定不用多說