Re: [問題] 多載 operator+
首先我得說,我對C++/CLI的了解非常粗淺
就我的認知,C++/CLI handle算是一種 "pointer to info of the object"
如果有錯誤還請各位不吝指正
※ 引述《Nestarneal (涅斯)》之銘言:
: 開發平台(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 的型態都是 StringOperator^
注意有個^
表示它們是handle,也就是指向info of StringOperator的pointer
: 執行 str1=str2 以後如果我把 str1 的 m_str delete掉會出錯。
: 不過事實上應該不會有錯。
所以 str1 = str2 的意思就是令str1和str2指向一樣的位址
這裡的等號是兩個pointer(或handle)之間的operator
(StringOperator^ 和 StringOperator^)
而你實作的等號是pointer和refference之間的operator
(StringOperator% 和 StringOperator^)
所以str1 = str2之後,delete str1->m_str 就等同於 delete str2->m_str
如果str2這時還有被參考到,當然就error了
: 接著我把敘述 str1=str2 改為 str1->operator=(str2)以後執行就正確了。
: 所以我認為是 operator= 的部分出問題。
: 接著我為了測試,把 cout << "test!!"; 放到了 operator= 的函式中,
: 結果發現當我使用 str1=str2 的敘述,程式沒有跑我多載的函式,
: 而當我使用 str1->operator=(str2) 的敘述,程式才真正有跑。
str1->operator=(str2) 就是跑你實作的 operator 了
: 不過這樣我就有點搞不懂。
: ref class 理應沒有 default assignment operator
: 如果用 str1=str2 沒有跑我多載的函式,那程式到底是做了什麼?
如同前述,就是做兩個 pointer (或handle)之間的賦值運算而已
另外我不是很確定 CLI 會不會有 default assignment operator
不過一般C++是有的 (member-wise copy)
: 因為事實上如果在這行敘述以後把內容 print 出來,
: 確實 str2 的值有給 str1了,只是是怎麼給就不清楚了...
: 而且為什麼程式沒有跑我多載的函式?
: 我也有做其他的運算式多載:
: static StringOperator^ operator+(StringOperator^ str1, double d);
: static StringOperator^ operator-(StringOperator^ str1,
: StringOperator^ str2);
: 這些都沒有問題,就只有 operator= 的部分出問題。
: 請問這是怎麼了...?
這些回傳都是 StringOperator^
用型態為StringOperator^的變數去接當然OK
至於會不會跑出你想像的結果我就不知道了,要看你的實作
為什麼要寫成有的operator回傳handle,有的回傳refference呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.65.124
推
11/11 15:20, , 1F
11/11 15:20, 1F
→
11/11 15:20, , 2F
11/11 15:20, 2F
→
11/11 15:21, , 3F
11/11 15:21, 3F
→
11/11 15:22, , 4F
11/11 15:22, 4F
→
11/11 15:22, , 5F
11/11 15:22, 5F
→
11/11 15:22, , 6F
11/11 15:22, 6F
推
11/11 20:13, , 7F
11/11 20:13, 7F
推
11/11 20:24, , 8F
11/11 20:24, 8F
→
11/11 20:24, , 9F
11/11 20:24, 9F
→
11/11 20:25, , 10F
11/11 20:25, 10F
推
11/11 21:01, , 11F
11/11 21:01, 11F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):