Làm thế nào để bỏ một con trỏ để làm mất đối tượng đối tượng lớp?C++ typecast: đúc một con trỏ từ con trỏ void đến con trỏ lớp
Trả lời
Với static_cast
. Lưu ý rằng bạn chỉ phải làm điều này nếu con trỏ thực sự trỏ đến một đối tượng thuộc kiểu được chỉ định; có nghĩa là, giá trị của con trỏ tới void
được lấy từ một con trỏ đến một đối tượng như vậy.
thing * p = whatever(); // pointer to object
void * pv = p; // pointer to void
thing * p2 = static_cast<thing *>(pv); // pointer to the same object
Nếu bạn thấy mình cần làm điều này, bạn có thể muốn suy nghĩ lại về thiết kế của mình. Bạn đang từ bỏ sự an toàn về loại, giúp bạn dễ dàng viết mã không hợp lệ:
something_else * q = static_cast<something_else *>(pv);
q->do_something(); // BOOM! undefined behaviour.
Không, điều đó không hữu ích; nó sai. Sử dụng 'reinterpret_cast'. –
@MarceloCantos: Tại sao bạn lại sử dụng một dàn diễn viên nguy hiểm hơn cả vai diễn bạn cần? –
+1 @MarceloCantos: Không, thực sự là đúng. 'static_cast' được sử dụng để đảo ngược chuyển đổi tiềm ẩn và con trỏ lớp thành con trỏ void là một chuyển đổi ngầm định. –
- 1. C++ con trỏ đến lớp
- 2. con trỏ Void trong C++
- 3. C++: Khởi tạo con trỏ đến con trỏ đến int
- 4. Số học con trỏ Void
- 5. Con trỏ C++ trỏ đến Java
- 6. Con trỏ hàm được đúc trong C++
- 7. Con trỏ void trong C++ là gì?
- 8. con trỏ trỏ đến chức năng gán
- 9. Đúng cách đúc các loại con trỏ
- 10. thay đổi con trỏ đến con trỏ ngón tay
- 11. Con trỏ trỏ tới con trỏ với argv
- 12. con trỏ const gán cho một con trỏ
- 13. Gọi C++ con trỏ hàm từ C#
- 14. Con trỏ chuột CSS ... xoay con trỏ?
- 15. Cross-trình duyệt 'con trỏ: con trỏ'
- 16. Con trỏ cho con trỏ là gì?
- 17. C++. phương pháp lớp con trỏ
- 18. Chuyển nhượng <con trỏ đến mảng các hằng> = <con trỏ đến mảng>: con trỏ tương thích
- 19. Con trỏ truyền từ kiểu cơ sở đến kiểu con
- 20. Đi tương đương với một con trỏ void trong C
- 21. void con trỏ và ffcall thư viện
- 22. Con trỏ trỏ tới con trỏ số học
- 23. Ý nghĩa của con trỏ trỏ tới con trỏ trong C và trong C++ là gì?
- 24. Sự khác nhau giữa con trỏ tới con trỏ và con trỏ tới mảng?
- 25. cách đúc một con trỏ gián tiếp trong Objective-C
- 26. Một mảng của con trỏ trỏ đến cùng một mảng
- 27. Chuyển đổi từ con trỏ C++/CLI sang con trỏ C++ bản địa
- 28. C con trỏ Câu
- 29. Tham chiếu đến con trỏ
- 30. Là một diễn viên từ (con trỏ đến const) đến (con trỏ đến không-const) không hợp lệ C++?
Làm cách nào bạn có được con trỏ ở vị trí đầu tiên? Làm thế nào để bạn biết nó thực sự chỉ vào một đối tượng? Làm thế nào để bạn biết loại đối tượng mà nó trỏ đến? –