Như bạn nói đúng mình, vector không hủy cuộc gọi cho các yếu tố của nó. Vì vậy, trong ví dụ của bạn, vector thực hiện gọi là "trình phá hủy các con trỏ". Tuy nhiên, bạn phải ghi nhớ rằng các kiểu con trỏ không có destructors. Chỉ có các loại lớp mới có thể có các trình phá hủy. Và con trỏ không phải là lớp. Vì vậy, nó là chính xác hơn để nói rằng std::vector
áp dụng cú pháp cuộc gọi giả-destructor cho các đối tượng con trỏ được lưu trữ trong vectơ. Đối với các loại con trỏ mà kết quả là không hoạt động, tức là không có gì.
Điều này cũng trả lời phần thứ hai của câu hỏi của bạn: liệu các đối tượng myclass
được trỏ bởi con trỏ có bị phá hủy hay không. Không, họ không bị phá hủy. Ngoài ra, có vẻ như bạn bằng cách nào đó tin rằng "gọi destructors trên con trỏ" (phần đầu tiên của câu hỏi của bạn) là cùng một điều như "phá hủy các đối tượng nhọn" (phần thứ hai của câu hỏi của bạn). Trong thực tế đây là hai thứ hoàn toàn không liên quan khác nhau.
Để tạo liên kết từ danh sách cũ đến sau, tức làđể làm cho vectơ phá hủy các đối tượng nhọn, bạn cần phải xây dựng vectơ của bạn từ một số loại "con trỏ thông minh", trái ngược với con trỏ thô thông thường myclass *
. Các vector sẽ tự động gọi destructors của "con trỏ thông minh" và những destructors, lần lượt, sẽ phá hủy các đối tượng nhọn. "Liên kết" này chỉ có thể được thực hiện một cách rõ ràng, bên trong trình phá hủy "con trỏ thông minh", đó là lý do tại sao con trỏ thô thông thường không thể giúp bạn ở đây.
Kiểm tra [boost :: ptr_vector] (http://www.boost.org/doc/libs/1_49_0/libs/ptr_container/doc/ptr_vector.html) –