Tôi chỉ đang cố gắng biên dịch một dự án lớn hơn một chút bằng cách sử dụng Visual Studio 2012 Release Candidate, C++. Dự án đã được/được biên dịch bằng cách sử dụng VS2010 ngay bây giờ. . (Tôi chỉ tham lam để có được C++ 11 điều, vì vậy tôi cố gắng :)Tại sao bad_alloc (const char *) được tạo riêng tư trong Visual C++ 2012?
Ngoài những điều mà tôi có thể giải thích bởi bản thân mình, dự án sử dụng mã như thế này:
ostringstream ostr;
ostr << "The " __FUNCTION__ "() failed to malloc(" << i << ").";
throw bad_alloc(ostr.str().c_str());
Các trình biên dịch bây giờ than phiền
error C2248: 'std::bad_alloc::bad_alloc' : cannot access private member declared
in class 'std::bad_alloc'
... điều này là đúng. Phiên bản của hàm tạo đó giờ đây là riêng tư.
Lý do khiến phiên bản của hàm tạo đó là riêng tư? Được khuyến nghị bởi C++ 11 tiêu chuẩn không sử dụng constructor đó với đối số?
(Tôi có thể tưởng tượng rằng nếu phân bổ thất bại, nó có thể gây ra nhiều vấn đề hơn để cố gắng xây dựng bất cứ điều gì mới. Tuy nhiên, nó chỉ là tôi đoán.)
Cảm ơn, Petr
Cảm ơn rất nhiều câu trả lời được xây dựng. – pepr