2009-07-14 58 views
5

Tôi nhớ thấy ở đâu đó có toán tử "^" được sử dụng như toán tử con trỏ trong mã Managed C++. Do đó "^" nên tương đương với toán tử "*" đúng không ??Hiểu String^trong C++ .Net

Giả sử hiểu biết của tôi là đúng, khi tôi bắt đầu tìm hiểu Net và mã hóa một vài chương trình Ví dụ, tôi tình cờ gặp một số mã như thế này:

String ^username; //my understanding is you are creating a pointer to string obj 
. 
.   // there is no malloc or new that allocates memory to username pointer 
. 
username = "XYZ"; // shouldn't you be doing a malloc first??? isn't it null pointer 

tôi đang gặp khó khăn tìm hiểu này.

Trả lời

8

String^ là con trỏ tới vùng được quản lý, còn gọi là xử lý. Con trỏ và tay cầm không thể hoán đổi cho nhau.

Gọi new sẽ cấp phát một đối tượng trên một vùng không được quản lý và trả về một con trỏ. Mặt khác, gọi gcnew sẽ phân bổ một đối tượng trên một vùng lưu trữ được quản lý và trả về một tay cầm.

Dòng username = "XYZ" chỉ đơn thuần là đường biên dịch. Nó tương đương với

username = gcnew String(L"XYZ"); 
3

Đó là tham chiếu, không phải con trỏ, đến chuỗi thu thập rác.

Nó sẽ được phân bổ và giải quyết tự động, khi không có gì tham chiếu nữa.

2

Nếu bạn xem xét rằng ^ cũng tương tự như shared_ptr bạn sẽ không xa sự thật.