Trong lớp học của tôi, tôi có một biến thành viên std::vector<node*> children
Đó có phải là một rò rỉ bộ nhớ để push_back một con trỏ vào một vector của con trỏ?
Chức năng thành viên của lớp sau có tạo ra rò rỉ bộ nhớ không?
//adds a child node
{
node* child = new node("blah","blah","blah");
child->Set_Parent(this);
children.push_back(child); //<- Is this ok?
}
Các vector tạo một bản sao của con trỏ và tôi có hai con trỏ vào bộ nhớ cùng, và sau đó con trỏ gốc đi ra khỏi phạm vi, phải không?
Điều này có thể đơn giản và rõ ràng, nhưng tôi chỉ muốn xác nhận giả định của mình.
cảm ơn
Tôi khuyên bạn nên xem xét các con trỏ thông minh, như ['std :: shared_ptr'] (http://en.cppreference.com/w/cpp/memory/shared_ptr). –
@JoachimPileborg: Bạn thậm chí có thể sử dụng ['std :: unique_ptr'] (http://en.cppreference.com/w/cpp/memory/unique_ptr) trong trường hợp này, như' std :: vector' hỗ trợ các ngữ nghĩa di chuyển. – bitmask
Nếu các nút luôn có bố mẹ, bạn có thể biến nó thành một phần của hàm tạo. Sau đó, bạn chỉ cần 'children.push_back (nút mới (" blah "," blah "," blah "), cái này);' – dtech