Tôi là một chút mới đối với C++ và đang thực hiện lập trình trong Obj-C và Java cho đến bây giờ.C++: về quản lý bộ nhớ
Nói, tôi có một lớp:
class Person {
private:
Wife *current_wife;
//.....
};
Vì vậy obv tôi cần phải thực hiện một phương pháp setter để thay đổi biến dụ Vợ.
Như thế này:
Person::SetCurrentWife (Wife *new_wife) {
current_wife = new_wife;
}
Đó sẽ là một bản sao shalllow.
Vì vậy, ở đâu đó từ vòng lặp chính hoặc một cái gì đó tôi gọi:
Person *some_person = new Person();
...
Wife *wife = new Wife();
some_person->SetCurrentWife(wife);
Vì vậy, tôi đang bối rối: sẽ có một rò rỉ bộ nhớ đây? Tôi có nên xóa đối tượng vợ ở đây hoặc trong destructor của Person? Trong Obj-C tôi sẽ giải phóng người vợ hiện tại và sau đó gửi một thông điệp giữ lại cho vợ đối tượng ở trên, nhưng cách thích hợp để làm phương pháp setter trong C + + là gì?
Vì bạn mới dùng C++, hãy lưu ý lời khuyên này: không bao giờ sử dụng 'mới',' xóa' hoặc con trỏ. Ngoại trừ, bạn * có thể * sử dụng 'mới' bên trong hàm tạo của con trỏ thông minh, nhưng chỉ sau khi bạn đã xác định rằng bạn thực sự yêu cầu bộ nhớ động. –
Kerrek quên giới thiệu [một cuốn sách giới thiệu C++ tốt] (http://stackoverflow.com/q/388242/46642) :) –
Trong OO bạn không obv cần một setter, bạn cần chức năng để cho đối tượng làm điều gì đó (ly hôn, tái hôn). Setters có thể được thuận tiện, họ không obv. – stefaanv