[問題] 這兩個new的差異

看板C_and_CPP作者 (幻)時間14年前 (2009/12/08 17:12), 編輯推噓4(409)
留言13則, 6人參與, 最新討論串1/1
有一個class叫做ABC,因為在很多class會用到他, 而且他需要初始化一些東西(不是指constructor), 所以我把初始化的code寫在另一個可以被共同呼叫的函式 以免把這個code在每個 class 都再寫一次 in header: ABC* myABC; in source: InitABC(myABC); 而函式原本是這樣寫 但是會錯誤: void InitABC(ABC* aABC) { aABC = ABC::NewL(); // ... } 如果改成這樣就ok ABC* InitABC() { ABC* aABC = ABC::NewL(); return aABC; } 並改用 myABC = InitABC(); 請問上面這兩個的差異是什麼呢? 註: NewL的內容: ABC* ABC::NewL() { ABC* tmp = new ABC(); // ...some code return tmp; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.138.141 ※ 編輯: maboroshiga 來自: 123.204.138.141 (12/08 17:13)

12/08 17:13, , 1F
pass-by-value....
12/08 17:13, 1F

12/08 17:14, , 2F
你的錯誤是執行時期錯誤吧?? 第一種方法請你在initABC之
12/08 17:14, 2F

12/08 17:15, , 3F
後檢查看看到底有沒有成功new回東西....
12/08 17:15, 3F

12/08 17:17, , 4F
所以意思是 第一種方法 在函數之後aABC就被銷毀了嗎?
12/08 17:17, 4F

12/08 17:20, , 5F
不, 更慘, 它造成memory leak, 直到程式結束由OS回收:)
12/08 17:20, 5F

12/08 17:21, , 6F
常見解決方法除了你的第二種, 一個是用pointer to
12/08 17:21, 6F

12/08 17:21, , 7F
pointer, 即**pABC, 另一個即為pass by reference...:)
12/08 17:21, 7F

12/08 17:23, , 8F
以1F a大的關鍵字, 與pass by reference去查查資料吧XD
12/08 17:23, 8F

12/08 17:27, , 9F
void InitABC(ABC* &aABC)
12/08 17:27, 9F

12/08 17:38, , 10F
看到NewL應該是寫Symbian吧...科科
12/08 17:38, 10F

12/08 18:26, , 11F
是啊 被發現了XD 不過我知道為什麼1不行了 因為是副本
12/08 18:26, 11F

12/08 18:49, , 12F
不說原本的問題,header 直接定義變數你還真敢。
12/08 18:49, 12F

12/08 18:54, , 13F
myABC是這個class的成員 不能這樣定義嗎?
12/08 18:54, 13F
文章代碼(AID): #1B7XX-ro (C_and_CPP)