Đối với những triển khai trình biên dịch có sử dụng vtables: có trường hợp nào khi bảng chức năng ảo được thay đổi trong thời gian chạy không? Hoặc vtables chỉ được điền vào lúc biên dịch và không có hành động nào được thực hiện để sửa đổi chúng trong thời gian chạy?Sửa đổi Vtable tại thời gian chạy
Trả lời
Tôi không biết bất kỳ C++ ABI nào có triển khai đa hình sử dụng các bảng ảo thay đổi khi chạy. Tuy nhiên, nó sẽ không hữu ích vì các bảng ảo thường mô tả một thuộc tính của mã (mối quan hệ của các hàm thành viên với mỗi vị trí khác trong phân cấp lớp) và mã C++ không thay đổi khi chạy.
Và bởi vì nó sẽ không hữu ích, nó sẽ lãng phí.
Vtables có đi trên phần mã hoặc phần dữ liệu trong hình ảnh có thể thực thi không? –
@KarolisM ilieška: Theo đó thực hiện? Và tại sao bạn cần biết? –
Để cụ thể: ARM Keil, nhưng điều này cũng áp dụng cho gcc arm. 1. Tôi chỉ là currious, 2. Tôi làm việc với các hệ thống nhúng và đôi khi nó là cần thiết để biết nơi để đặt một số phần. –
Câu trả lời ngắn gọn là không.
Câu trả lời dài hơn (và có thể là triển khai cụ thể) là con trỏ của đối tượng đến các thay đổi vtable thực tế trong khi thực thi hàm tạo và hàm hủy của lớp đa hình, để các phương thức ghi đè trong lớp dẫn xuất không được thực thi bởi constructor/destructor của lớp cơ sở trong khi lớp dẫn xuất chưa được xây dựng/đã bị hủy.
Nếu bạn muốn đối tượng để thay đổi lớp trong thời gian chạy sau đó bạn có một số tùy chọn:
Objective-C (++)
tay mã cơ chế công văn của riêng bạn
python/javascript etc al.
(tùy chọn tốt nhất) xem xét lại thiết kế của bạn.
Nó không phải là vtable thay đổi. Đó là thành viên vptr của đối tượng bị hủy diệt! –
Ngoài ra, 'std :: function' có thể được gán lại vào thời gian chạy, vì vậy đây là một tùy chọn khác –
@KerrekSB cố định, mặc dù tôi chắc chắn có từ ngữ tốt hơn –
- 1. Thay đổi App.config tại Thời gian chạy
- 2. Thay đổi menu tại thời gian chạy
- 3. Cách sửa đổi thời gian chạy phần web.config?
- 4. Thêm, sửa đổi, loại bỏ celery.schedules tại thời điểm chạy
- 5. Sửa đổi tên tệp xuất PDF mặc định DataTables TableTools tại thời gian chạy
- 6. Làm thế nào để sửa đổi mã javascript tại thời gian chạy?
- 7. Sửa đổi mô hình khung thực thể tại thời gian chạy
- 8. Sửa đổi ngày mà không sửa đổi thời gian
- 9. Linux, các tệp thời gian sửa đổi khác với thời gian hiện tại
- 10. Ràng buộc Ninject tại thời gian chạy
- 11. WPF: Cách thay đổi CurrentUICulture tại thời gian chạy
- 12. Thay đổi thuộc tính log4j tại thời gian chạy
- 13. Thay đổi kích cỡ một THREE.CubeGeometry tại thời gian chạy
- 14. Cách thay đổi Spring's @Scheduled fixedDelay tại thời gian chạy
- 15. WPF + PRISM Cách thay đổi vùng tại thời gian chạy
- 16. thay đổi Vị trí nhãn tại thời gian chạy
- 17. Thay đổi kích thước SpriteNode PhysicsBody tại thời gian chạy
- 18. Thay đổi múi giờ Java tại thời gian chạy
- 19. Cách thay đổi vị trí trang tại thời gian chạy
- 20. Thay đổi giá trị của macro tại thời gian chạy
- 21. Thay đổi Triển khai/Lớp tại thời gian chạy
- 22. Biến số SSIS tại thời gian chạy
- 23. Thay thế đậu tại thời gian chạy
- 24. Chạy PublicResXFileCodeGenerator tại thời gian biên dịch
- 25. Luigi - Unfulfilled% s tại thời gian chạy
- 26. phương thức gọi tại thời gian chạy
- 27. Thay đổi Font trong thời gian chạy
- 28. Thay đổi hướng trong thời gian chạy
- 29. Thay đổi dấu thời gian của một sửa đổi SVN
- 30. Tại sao CheckBoxFor sản xuất lỗi thời gian chạy
Bạn sắp xếp những sửa đổi thời gian chạy nào hữu ích/có thể? –
@ Cheersandhth.-Alf nếu đó là một chương trình C++ đơn giản hơn không, nó ngớ ngẩn. nhưng nếu anh ta (bây giờ hoặc trong tương lai) sẽ phải viết một cái gì đó như VM hoặc một trình biên dịch interperter/JIT hơn tôi sẽ không loại bỏ câu hỏi của mình quá nhanh –
Đó là imp ... rất khó để tìm ra một thiết kế như vậy thread-safe, do đó, nó không được thực hiện. –