看板 C_and_CPP 關於我們 聯絡資訊
List Test::GetList() { return m_oList; } Test oTest; List oList = oTest.GetList(); 這樣子做還是會取得 m_oList, 等於 oList 是 m_oList 的別名 那修改 oList 就會改到 m_oList 請問要怎麼做才能避免修改到 m_oList, 或是能夠 overloading operator 讓 GetList() 回傳 copy value 謝謝 -- #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <vector> using namespace std; #define MAX_NAME_LENGTH 256 typedef struct _Ele { char sName[MAX_NAME_LENGTH]; } Ele; class List { public: List() {} ~List() {} // Ele Get(int index) { return m_vEle[index]; } // bool Add(const char *sName) { Ele Ele; strcpy(Ele.sName, sName); m_vEle.push_back(Ele); } int GetSize() { return (int)m_vEle.size(); } // void Clear() { m_vEle.clear(); } List operator=(const List &rhs) { printf("....\n"); if(this == &rhs) return *this; this->Clear(); return *this; } // private: vector<Ele> m_vEle; }; class Test { public: // Test() { m_oList.Add("XD"); } ~Test() {} // List GetList() { return m_oList; } void Dump() { for(int i=0; i<m_oList.GetSize(); ++i) { printf("%s\n", m_oList.Get(i).sName); } } private: List m_oList; }; int main() { Test oTest; // printf("orz..dd..\n"); List oList = oTest.GetList(); oList.Add("orz"); for(int i=0; i<oList.GetSize(); ++i) { printf("%s\n", oList.Get(i).sName); } oTest.Dump(); // return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.110.160.71 ※ 編輯: ACMTino 來自: 123.110.160.71 (10/20 01:55)
QQ29:我看你一開始的例子 沒有reference存在阿? 10/20 02:13
QQ29:回傳用copy 妳宣告的也是一個物件=回傳 又copy一次 10/20 02:13
QQ29:你這不就已經是copy了!? 10/20 02:14
ACMTino:可是為什麼 List oList = oTest.GetList(); 和 oTest.Dump 10/20 02:22
ACMTino:內容一樣?? 10/20 02:22
ACMTino:應該只有 oList 有 orz 而已.. 10/20 02:23
littleshan:是啊 我測的結果的確是只有 oList 有 orz 10/20 10:08