2010-02-11 68 views
9

có thể:
Why ‘this’ is a pointer and not a reference?
SAFE Pointer to a pointer (well reference to a reference) in C#Tại sao 'này' từ khóa không phải là một kiểu tham chiếu trong C++ Bản sao

Từ khóa this trong C++ được một con trỏ đến đối tượng hiện tại tôi là.

Câu hỏi của tôi là lý do loại this loại con trỏ và không phải là loại tham chiếu. Có điều kiện nào theo đó từ khóa this sẽ là NULL không?

Suy nghĩ tức thì của tôi sẽ ở trong một hàm tĩnh, nhưng Visual C++ ít nhất là đủ thông minh để phát hiện ra điều này và báo cáo static member functions do not have 'this' pointers. Đây có phải là tiêu chuẩn không?

+2

Dupe http://stackoverflow.com/questions/645994/why-this-is-a-pointer-and-not-a-reference –

+2

Không chính xác và trùng lặp! Câu hỏi khác không giải quyết các câu hỏi phụ được đặt ra ở đây, như "có thể' này bao giờ được null? ". Tôi đã ở giữa trả lời rằng khi câu hỏi này đã được đóng lại. –

+0

"Có bất kỳ điều kiện nào theo đó từ khoá' này' sẽ là * NULL * không? " trả lời ở nơi khác? –

Trả lời

16

Xem Stroustrup của Why is this not a reference

Bởi vì "này" đã được giới thiệu vào C++ (thực sự vào C với các lớp) trước khi tài liệu tham khảo đã được thêm vào. Ngoài ra, tôi đã chọn "này" để theo dõi việc sử dụng Simula, thay vì sử dụng Smalltalk (sau này) của "self".

+2

Tại sao lại là downvote? , điều này xuất phát từ BS (rõ ràng) – Tom

+0

Có lẽ ai đó nghĩ rằng tôi đã sao chép câu trả lời từ câu hỏi trùng lặp (mà không phải là trường hợp, tôi vừa phát hiện ra nó trong lần thứ hai này). – Dario

0

(có lẽ không phải là một câu trả lời đầy đủ) Luôn luôn có tình hình khi một đối tượng cần xóa bản thân với "nguy hiểm"

delete this; 

Vì vậy, nó có thể có được một con trỏ.

M.

+7

Nếu đó là một tham chiếu bạn có thể 'xóa &this;'. –

+2

'delete & this' thậm chí có thể có lợi thế hơn' xóa this' trong đó '&' bổ sung có thể khiến bạn tự hỏi mình nếu bạn thực sự được phép xóa đối tượng hiện tại, tức là. nếu nó được phân bổ động trên heap. 'xóa cái này 'trông có vẻ không phô trương hơn về khía cạnh này, IMO. – stakx

3

Vì tài liệu tham khảo chưa được thêm vào C++ cho đến sau này. Lúc đó đã quá muộn để thay đổi nó.

Các vấn đề liên quan