看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《realmojo (蟹老闆)》之銘言: : #include <vector> : #include <iostream> : using namespace std; : class Bin; : vector<Bin> *v; : struct Bin { : int *glass; : Bin():glass(new int(0)) {} : }; : int main() { : v = new vector<Bin>(2); : *(v->at(0).glass) = 9; : cout << *(v->at(1).glass) << endl; : } : 為什麼output會是9而不是0? 我用debugger下去跑發現你的兩個Bin的glass都被改成9 原因在於似乎容器只會建構(construct)一個Bin 然後剩的都用copy的方式將它填滿整個陣列 因為是copy的方式 而你沒有寫復製的函數,它預設就是binary的方式一對一copy 導至vector裡的Bin指標都是指向同一個int的位置 改寫或讀取當然就是都指向同一個位置 會全都一樣 你可以用debugger下去跑跑看 -- 哇咧咧 創意投票系統 http://walele.com 易記學 程式設計教學 http://ez2learn.com/ 易記學 程式設計討論區 http://forum.ez2learn.com VICTOR's 個人Blog http://blog.ez2learn.com/ 財報分析王 http://victorlin.serveftp.org/stock/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.113.156.83
realmojo:thanks! 02/02 15:49