看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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)
shadow0326:多載的是StringOperator, 不是ptr to StringOperator 11/11 13:40
shadow0326:str1=str2 就只是讓兩個pointer指到同一位址而已 11/11 13:42
shadow0326:突然想到CLI的handle和一般的ptr不太一樣, 所以上面講 11/11 13:51
shadow0326:的不太對...不過大體上問題的方向應該是相同的 11/11 13:52
Nestarneal:str1=str2的敘述跟str1->operator=(str2)的敘述一樣 11/11 14:20
Nestarneal:所以多載operator=不是就可以了嗎? 11/11 14:21
Nestarneal:我在函式有 new 一塊新記憶體空間把資料複製過來 11/11 14:21
Nestarneal:指向不是不同嗎? 11/11 14:21
LPH66:str1 是個 StringOperator^ 而多載的是 StringOperator 11/11 15:22