2012-08-13 37 views
5

Mối quan hệ giữa các const_multi_array_ref, multi_array_refmulti_array là như sau:Tại sao destructor của `boost :: multi_array_ref` không phải là ảo?

  • multi_array_ref có nguồn gốc từ const_multi_array_ref
  • multi_array có nguồn gốc từ multi_arry_ref

Tuy nhiên, hàm hủy của const_multi_array_refmulti_array_ref là phi ảo. Trong thực tế, họ không có một destructor rõ ràng thực hiện. Chỉ có multi_array có một cái. Điều này có ngụ ý việc sử dụng sau đây không được khuyến cáo?

multi_array_ref<float, 2> * = new multi_array<float, 2>(extents[3][3]); 

Nếu có, tại sao?

+0

vui lòng tránh sử dụng con trỏ để tăng tốc. boost được thiết kế chủ yếu để tận dụng việc sử dụng con trỏ thông minh –

Trả lời

2

multi_array các lớp thư viện không được thiết kế cho đa hình động. Họ không có bất kỳ chức năng ảo, do đó, nó không có vẻ hợp lý để làm cho destructor ảo quá. Đó là thiết kế giống như STL phổ biến, multi_array_ref chỉ được sử dụng làm bộ điều hợp giao diện hợp nhất cho các trường hợp sở hữu dữ liệu và không sở hữu.

Mẫu sử dụng của bạn không được khuyến khích - nó sẽ dẫn đến rò rỉ bộ nhớ vì multi_array destructor sẽ không được thực hiện trên cuộc gọi delete.

Nhưng sẽ an toàn khi truy cập multi_array ví dụ thông qua tham chiếu hoặc trỏ tới multi_array_ref.

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