xây dựng hai giai đoạn có hình dạng như sau:Các con trỏ thông minh có ngăn cản sự cần thiết phải xây dựng hai pha không?
struct something {
something()
: p1(NULL)
, p2(NULL)
{ }
~something() {
if (p1) delete p1;
if (p2) delete p2;
}
void initialize() {
p1 = new int(2);
p2 = new int(5); // May throw if allocation fails!
}
int* p1;
int* p2;
};
Điểm trong số đó là có một constructor ngây thơ (mà không xem cho thất bại phân bổ) sẽ bị rò rỉ bộ nhớ: destructor một đối tượng phần-xây dựng là không bao giờ được gọi .
Câu hỏi của tôi: là mã sau an toàn, và bằng cách sửa đổi, các con trỏ thông minh có làm giảm bớt việc xây dựng hai pha không?
struct something {
something()
: p1(new int(2))
, p2(new int(5))
{ }
std::unique_ptr<int> p1;
std::unique_ptr<int> p2;
};
Bạn không cần điều kiện trước khi 'xóa'. Nghiêm túc, bạn không. Xóa bỏ null là hoàn toàn tốt đẹp. –
Không có mới ném và xóa quá mà làm việc với phân bổ bộ nhớ giống như malloc()/miễn phí(). Nhưng ngay cả khi việc phân bổ chính nó không thất bại bằng cách sử dụng non-throwing new/delete, các nhà xây dựng đối tượng vẫn có thể ném. –
@KerrekSB Lưu ý. :) –