[問題] 多載 operator+

看板C_and_CPP作者 (涅斯)時間13年前 (2011/11/11 04:26), 編輯推噓2(207)
留言9則, 3人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) MS Visual Studio 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) .NET framework 4.0 問題(Question): 程式碼:http://pastie.org/2845419 我在 main 有宣告兩個物件,分別是 StringOperator^ str1 = gcnew StringOperator("abcd"); StringOperator^ str2 = gcnew StringOperator("abcd"); 執行 str1=str2 以後如果我把 str1 的 m_str delete掉會出錯。 不過事實上應該不會有錯。 接著我把敘述 str1=str2 改為 str1->operator=(str2)以後執行就正確了。 所以我認為是 operator= 的部分出問題。 接著我為了測試,把 cout << "test!!"; 放到了 operator= 的函式中, 結果發現當我使用 str1=str2 的敘述,程式沒有跑我多載的函式, 而當我使用 str1->operator=(str2) 的敘述,程式才真正有跑。 不過這樣我就有點搞不懂。 ref class 理應沒有 default assignment operator 如果用 str1=str2 沒有跑我多載的函式,那程式到底是做了什麼? 因為事實上如果在這行敘述以後把內容 print 出來, 確實 str2 的值有給 str1了,只是是怎麼給就不清楚了... 而且為什麼程式沒有跑我多載的函式? 我也有做其他的運算式多載: static StringOperator^ operator+(StringOperator^ str1, double d); static StringOperator^ operator-(StringOperator^ str1, StringOperator^ str2); 這些都沒有問題,就只有 operator= 的部分出問題。 請問這是怎麼了...? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.22.66 ※ 編輯: Nestarneal 來自: 114.38.22.66 (11/11 12:28)

11/11 13:40, , 1F
多載的是StringOperator, 不是ptr to StringOperator
11/11 13:40, 1F

11/11 13:42, , 2F
str1=str2 就只是讓兩個pointer指到同一位址而已
11/11 13:42, 2F

11/11 13:51, , 3F
突然想到CLI的handle和一般的ptr不太一樣, 所以上面講
11/11 13:51, 3F

11/11 13:52, , 4F
的不太對...不過大體上問題的方向應該是相同的
11/11 13:52, 4F

11/11 14:20, , 5F
str1=str2的敘述跟str1->operator=(str2)的敘述一樣
11/11 14:20, 5F

11/11 14:21, , 6F
所以多載operator=不是就可以了嗎?
11/11 14:21, 6F

11/11 14:21, , 7F
我在函式有 new 一塊新記憶體空間把資料複製過來
11/11 14:21, 7F

11/11 14:21, , 8F
指向不是不同嗎?
11/11 14:21, 8F

11/11 15:22, , 9F
str1 是個 StringOperator^ 而多載的是 StringOperator
11/11 15:22, 9F
文章代碼(AID): #1ElAFO1o (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
問題
2
9
文章代碼(AID): #1ElAFO1o (C_and_CPP)