[問題] 如何讓vector<A> Get()得到的資料不可修改

看板C_and_CPP (C/C++)作者 ( )時間16年前 (2009/12/15 21:44), 編輯推噓0(0015)
留言15則, 4人參與, 最新討論串1/3 (看更多)
class A{ ... }; class B{ public: B() {}; const vector<A> GetInfo() {return m_Info;} private: vector<A> m_Info; }; main() { B test(); ... vector<A> tmp = B.GetInfo(); /*透過tmp可以修改A, 我不要阿~~*/ } 請問 1. 除了宣告成const vector<A> tmp外可以達到我的目標, 還有別的方法嗎? 2. 在這個地方, const vector<A> GetInfo() 到底是讓誰const? 3. 如果傳回值是double**,如何使傳回的referene為const, 我寫const double** GetInfo, compiler不讓我過耶 謝謝各位囉~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.193.76 ※ 編輯: HeyScng 來自: 118.160.193.76 (12/15 21:45)

12/15 22:04, , 1F
B& operator =(const B& b) C++設定運算子
12/15 22:04, 1F

12/15 22:05, , 2F
vector 也是類別,B 可以繼承 vector。
12/15 22:05, 2F

12/15 22:07, , 3F
假如有用到指標的話,注意一下 rule of three 的部分。
12/15 22:07, 3F

12/15 22:46, , 4F
吽 好酷 class B: public vector<A> 第一次這樣寫XD
12/15 22:46, 4F

12/15 22:46, , 5F
那第二個問題 請問有人知道嗎?
12/15 22:46, 5F

12/15 23:00, , 6F
const vector<A> GetInfo() 回傳時會有一個temp物件產生
12/15 23:00, 6F

12/15 23:01, , 7F
而此 temp 物件是 const, temp 物件再利用 copy ctor
12/15 23:01, 7F

12/15 23:03, , 8F
初始化 tmp 物件。
12/15 23:03, 8F

12/15 23:04, , 9F
所以 johnhmj 的方法不適用於初始化,而適用於 assign
12/15 23:04, 9F

12/15 23:53, , 10F
請問 不知道該如何改寫copy ctor
12/15 23:53, 10F

12/15 23:54, , 11F
我讓他一步一步跑出現了 allocator 和 _Vector_base等字X
12/15 23:54, 11F

12/15 23:55, , 12F
s大的講法 照理說應該可以這樣trace出來
12/15 23:55, 12F

12/15 23:56, , 13F
這部分的程式碼都看不懂 還是只能慢慢練習看STL才能瞭解
12/15 23:56, 13F

12/16 00:38, , 14F
一般還是不要繼承stl容器,除非明確知道自己在做什麼
12/16 00:38, 14F

12/16 00:38, , 15F
stl容器的dtor都不是virtual的,所以會有潛在的mem leak.
12/16 00:38, 15F
文章代碼(AID): #1B9vBMHA (C_and_CPP)
文章代碼(AID): #1B9vBMHA (C_and_CPP)