Tôi nghe nói rằng việc ném ngoại lệ vào/từ thư viện C++ có thể nguy hiểm, đặc biệt là với các tệp DLL và đặc biệt nếu mã gọi và thư viện được biên dịch với các trình biên dịch khác nhau. Có sự thật này? Có an toàn miễn là tôi dính vào các thư viện tĩnh không? Lưu ý rằng tôi không nói về việc sử dụng nội bộ ngoại lệ trong thư viện mà thôi, tôi cũng muốn ném chúng sâu vào mã gọi điện thoại :)Không an toàn để ném ngoại lệ từ các thư viện C++ được liên kết tĩnh?
Chỉ cần làm rõ: Giả sử tôi có một thư viện tĩnh được biên dịch xác định lớp Foo như này:
class Foo
{
public:
// Constructor
Foo()
{
/* ... Do stuff ... */
if (stuffwentwrong)
throw(123); // We throw an integer error code (to make it simple)
}
};
Và một số anh chàng sử dụng nó như thế này:
try
{
Foo foo_object;
}
catch (int i)
{
std::cout << "Oh bum. Code: " << i;
}
rằng sẽ được an toàn không?
Có những vấn đề (khoảng 15 năm trước đây) này đã được giải quyết (trừ khi bạn đang làm việc sôi nổi như tự động tải/dỡ DLL tất cả bởi chính mình). Nếu bạn chỉ cần sử dụng một DLL thì bạn sẽ ổn thôi. –