Đoạn mã sau có rò rỉ bộ nhớ mà tôi đã dành quá nhiều thời gian để theo dõi. Vấn đề là bên trong Foo(), biến cục bộ x_ ẩn biến thành viên x_. Nó khá khó chịu quá, bởi vì trình biên dịch có thể đã cảnh báo tôi về nó. Có một lá cờ trong GCC cho một cảnh báo như vậy không? (Đối với những người tò mò: Tôi đã đến mã lỗi bằng cách sử dụng biến cục bộ đầu tiên, sau đó thay đổi thành biến thành viên, nhưng quên loại bỏ khai báo kiểu.)Cảnh báo về ẩn biến thành viên?
struct A {
A() x_(NULL) {}
~A() {
delete x_;
}
void Foo() {
HugeThingy* x_ = new HugeThingy();
x_->Bar("I. Need. Garbage. Collection. Now.");
}
HugeThingy* x_;
DISALLOW_COPY_AND_ASSIGN(A); // Macro to prevent copy/assign.
}
Một số người đã đề cập rằng bạn chỉ nên sử dụng đối tượng chuỗi đơn giản thay vì con trỏ và phân bổ động - và chúng đúng. Nếu (như tôi nghi ngờ), bạn thực sự muốn biết làm thế nào để trình biên dịch cảnh báo bạn khi bạn khai báo biến cục bộ ẩn biến thành viên, tôi khuyên bạn nên làm rõ câu hỏi của mình. –
Khi bạn có con trỏ làm biến thành viên, hãy nhớ cung cấp cho hàm tạo bản sao và toán tử gán. –
Nếu không cung cấp cho chúng, thì ít nhất hãy loại bỏ các giá trị mặc định. –