Dưới đây là vấn đề tối giản của các mã:lỗi biên dịch khi destructor tuyên bố trong cơ thể của lớp với unique_ptr như thành viên của cùng một lớp
struct B {
B() = default;
//~B() {}; // error: use of deleted function ‘B& B::operator=(const B&)’
std::unique_ptr<int> m_pB = nullptr;
};
int main()
{
std::vector<B> vB;
vB.erase(vB.begin());
}
Trên mã biên dịch tốt, trừ khi destructor là không chú thích. Đối với yêu cầu của tôi, tôi cần phải có một cơ thể của ~B()
được xác định rõ ràng.
Làm thế nào tôi có thể xác định phần thân của hàm hủy với unique_ptr
cùng tồn tại trong cùng một lớp?
Note: Cố gắng xác định = default
phiên bản sao chép & constructor di chuyển vô ích. Trong mã thực sự của tôi, unique_ptr<int>
là unique_ptr<forward_declared_class>
. Không thể xác định được vấn đề này trong SO, mặc dù tôi chắc chắn rằng nó phải có mặt. Vui lòng đánh dấu là dupe.
Được chuyển tiếp tuyên bố có liên quan đến vấn đề - không thể gọi 'xóa' đáng tin cậy (tức là không thể khởi tạo' std :: default_deleter') mà không có trình phá hủy hiển thị. – milleniumbug
Xem câu hỏi này http://stackoverflow.com/questions/6012157/is-stdunique-ptrt-required-to-know-the-full-definition-of-t – milleniumbug
Không có lý do nào để gán nullptr cho m_pB. –