[問題] 多載 operator+
開發平台(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
11/11 13:40, 1F
→
11/11 13:42, , 2F
11/11 13:42, 2F
→
11/11 13:51, , 3F
11/11 13:51, 3F
→
11/11 13:52, , 4F
11/11 13:52, 4F
→
11/11 14:20, , 5F
11/11 14:20, 5F
→
11/11 14:21, , 6F
11/11 14:21, 6F
→
11/11 14:21, , 7F
11/11 14:21, 7F
→
11/11 14:21, , 8F
11/11 14:21, 8F
推
11/11 15:22, , 9F
11/11 15:22, 9F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):