[問題] vector初始化的問題

看板C_and_CPP (C/C++)作者 (蟹老闆)時間16年前 (2009/02/02 12:49), 編輯推噓10(10019)
留言29則, 6人參與, 最新討論串1/3 (看更多)
#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? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.91.181

02/02 13:35, , 1F
請補上 Bin(const Bin& b):glass(new int(0)){}
02/02 13:35, 1F

02/02 13:36, , 2F
Bin(const Bin& b):glass(new int(*b.glass)){}
02/02 13:36, 2F

02/02 15:49, , 3F
thanks
02/02 15:49, 3F

02/02 17:08, , 4F
請問ch大補上的那個constructor 他是哪時會呼叫呢?
02/02 17:08, 4F

02/02 17:10, , 5F
而且為什麼會呼叫~~
02/02 17:10, 5F

02/02 18:01, , 6F
沒道理阿? 怎麼會這樣?!
02/02 18:01, 6F

02/02 18:07, , 7F
下一篇有寫 XD
02/02 18:07, 7F

02/02 18:57, , 8F
預設建構子 拷貝建構子 指定運算子 三個通常都要補上
02/02 18:57, 8F

02/02 19:36, , 9F
下一篇有原因,不過我還是不明白這樣實作的理由
02/02 19:36, 9F

02/02 19:37, , 10F
為什麼不幫vector中的每個element呼叫預設建構子
02/02 19:37, 10F

02/02 19:39, , 11F
反而是呼叫copy constructor?
02/02 19:39, 11F

02/02 20:08, , 12F
copy constructor 能做的事情比較多阿 XD
02/02 20:08, 12F

02/02 20:12, , 13F
vector(size_type n) Creates a vector with n elements.
02/02 20:12, 13F

02/02 20:13, , 14F
vector(size_type n, const T& t) Creates a vector with n
02/02 20:13, 14F

02/02 20:13, , 15F
copies of t.
02/02 20:13, 15F

02/02 20:14, , 16F
SGI STL 並沒有說會拷貝阿~ 當然看源碼會知道它事實上只有
02/02 20:14, 16F

02/02 20:15, , 17F
合用一個建構式, 第二個參數 t 是預設參數, 但這是實做細節
02/02 20:15, 17F

02/02 20:16, , 18F
真怪~ 究竟是什麼原因呢?
02/02 20:16, 18F

02/02 20:17, , 19F
如果這兩隻函數可以共用的話最理想就是後者包前者的功能
02/02 20:17, 19F

02/02 20:19, , 20F
explicit vector(size_type _Count)
02/02 20:19, 20F

02/02 20:19, , 21F
: _Mybase() {// construct from _Count * _Ty()
02/02 20:19, 21F

02/02 20:19, , 22F
_Construct_n(_Count, _Ty());
02/02 20:19, 22F

02/02 20:19, , 23F
}
02/02 20:19, 23F

02/02 20:19, , 24F
vector(size_type _Count, const _Ty& _Val)
02/02 20:19, 24F

02/02 20:19, , 25F
: _Mybase() {// construct from _Count * _Val
02/02 20:19, 25F

02/02 20:19, , 26F
_Construct_n(_Count, _Val);
02/02 20:19, 26F

02/02 20:19, , 27F
}
02/02 20:19, 27F

02/02 20:21, , 28F
難道就只是為了程式碼重用??
02/02 20:21, 28F

02/02 21:00, , 29F
我也覺得他為啥不呼叫建構子 XD 感覺好像比較合理
02/02 21:00, 29F
文章代碼(AID): #19Xdj0Gl (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19Xdj0Gl (C_and_CPP)