→ realmojo:thanks! 02/02 15:49
※ 引述《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