看板 C_and_CPP 關於我們 聯絡資訊
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)
johnhmj:B& operator =(const B& b) C++設定運算子 12/15 22:04
johnhmj:vector 也是類別,B 可以繼承 vector。 12/15 22:05
johnhmj:假如有用到指標的話,注意一下 rule of three 的部分。 12/15 22:07
HeyScng:吽 好酷 class B: public vector<A> 第一次這樣寫XD 12/15 22:46
HeyScng:那第二個問題 請問有人知道嗎? 12/15 22:46
spider391:const vector<A> GetInfo() 回傳時會有一個temp物件產生 12/15 23:00
spider391:而此 temp 物件是 const, temp 物件再利用 copy ctor 12/15 23:01
spider391:初始化 tmp 物件。 12/15 23:03
spider391:所以 johnhmj 的方法不適用於初始化,而適用於 assign 12/15 23:04
HeyScng:請問 不知道該如何改寫copy ctor 12/15 23:53
HeyScng:我讓他一步一步跑出現了 allocator 和 _Vector_base等字X 12/15 23:54
HeyScng:s大的講法 照理說應該可以這樣trace出來 12/15 23:55
HeyScng:這部分的程式碼都看不懂 還是只能慢慢練習看STL才能瞭解 12/15 23:56
dp2:一般還是不要繼承stl容器,除非明確知道自己在做什麼 12/16 00:38
dp2:stl容器的dtor都不是virtual的,所以會有潛在的mem leak. 12/16 00:38