Dấu mũ ('^') có nghĩa là gì trong C ++ / CLI?


212

Tôi vừa xem qua mã này và một vài tìm kiếm của Google không tìm thấy lời giải thích nào về cú pháp bí ẩn (với tôi) này.

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

Cái quái gì có ý nghĩa? (Điều gcnewnày cũng mới đối với tôi và tôi đã hỏi về điều đó ở đây .)


6
Nhân tiện, nó được phát âm"mũ" .
kmote

Câu trả lời:


176

Đây là C ++ / CLI và dấu mũ là tương đương được quản lý của một * (con trỏ) mà theo thuật ngữ C ++ / CLI được gọi là 'xử lý' thành 'loại tham chiếu' (vì bạn vẫn có thể có con trỏ không được quản lý).

(Cảm ơn Aardvark đã chỉ ra thuật ngữ tốt hơn.)


5
Liệu cú pháp (tôi cho rằng "tham chiếu không được quản lý") "&" vẫn tồn tại trong C ++ / CLI?
Owen

C ++ / CLI là một phần mở rộng của C ++ thông thường, vì vậy, có - nó chỉ dành cho các tài liệu tham khảo không được quản lý
1800 THÔNG TIN

77
// here normal pointer
P* ptr = new P; // usual pointer allocated on heap
P& nat = *ptr; // object on heap bind to native object

//.. here CLI managed 
MO^ mngd = gcnew MO; // allocate on CLI heap
MO% rr = *mngd; // object on CLI heap reference to gc-lvalue

Nhìn chung, punctuator %^như punctuator &*. Trong C ++, toán tử đơn nguyên &nằm trong C ++ / CLI toán tử đơn nguyên %.

Trong khi &ptrmang lại một P*,%mngd sản lượng tại MO^.


1
Tôi muốn nói tại sao không ^ mngd thay vì * mngd .. Thật khó hiểu khi tất cả được phép sử dụng biểu tượng con trỏ không được quản lý (*), không phải là con trỏ được quản lý (^) trước biến thực sự được khai báo trong heap được quản lý.
swcraft

20

Nó có nghĩa là đây là một tham chiếu đến một đối tượng được quản lý so với một con trỏ C ++ thông thường. Các đối tượng đằng sau các tham chiếu như vậy được quản lý bởi bộ thực thi và có thể được định vị lại trong bộ nhớ. Chúng cũng được thu gom rác tự động.


17

Khi bạn cấp phát bộ nhớ được quản lý, bộ nhớ đó có thể được di chuyển xung quanh bởi trình thu gom rác. Toán tử ^ là một con trỏ cho bộ nhớ được quản lý, tiếp tục trỏ đến đúng vị trí ngay cả khi trình thu gom rác di chuyển đối tượng mà nó trỏ tới.


4

Từ MSDN, có vẻ như dấu mũ có nghĩa là bạn đang xử lý loại được tạo.

https://web.archive.org/web/20150117095313/http://msdn.microsoft.com/en-us/l Library / te3ecsc8% 28VS.80% 29.aspx


liên kết chết (2018)
gbarry

đã sửa liên kết đến archive.org copy. Thành thật mà nói, các liên kết MSDN rất mong manh nên tất cả các liên kết MSDN mới chỉ nên được chạy qua archive.org ngay từ đầu.
Anssssss


2

Nó có nghĩa là nó là một tham chiếu đến một đối tượng được quản lý.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.