Tôi cần tạo con trỏ của các cá thể của một lớp và chương trình không biết thời gian biên dịch sẽ tạo bao nhiêu con trỏ. Để xóa, tôi đã xem xét lưu trữ các con trỏ trong một vectơ, và sau đó xóa từng con một. Việc sử dụng các con trỏ thông minh có phải là cách dọn dẹp không? Và nếu không muốn sử dụng con trỏ thông minh, liệu việc sử dụng vectơ này có được coi là sạch sẽ không?Xóa véc tơ của con trỏ
đang tối thiểu:
#include <vector>
using namespace std;
class Foo {
public:
Foo();
};
Foo::Foo(){}
void createFooVector(int nb, std::vector<Foo*> &v){
for(int i=0;i<nb;i++){
Foo* f = new Foo();
v.push_back(f);
}
}
int main(int argc, char *argv[]){
std::vector<Foo*> v;
createFooVector(5,v);
while (!v.empty()){
Foo* f = v.back();
v.pop_back();
delete f;
}
}
Bạn có thực sự cần một hộp chứa con trỏ không? Bạn không thể lưu trữ các đối tượng 'Foo' của bạn làm giá trị (' std :: vector ')? Ngoài ra, sẽ không rõ ràng hơn nếu 'createFooVector' trả lại một vectơ mới thay vì sửa đổi một đối số đã cho làm đối số? –
@LucTouraille Tôi sử dụng con trỏ vì lý do này: http://stackoverflow.com/questions/15471193/vector-of-virtual-class-are-pointers-the-clean-way-to-go ... điều này có thể không được nhìn thấy trong mã tôi hiển thị ở đây mặc dù, cố gắng giữ cho nó tối thiểu – Vince