Xét đoạn mã sau:Chức năng-phạm vi constructor tĩnh của đối tượng ném một ngoại lệ
#include <iostream>
struct X{
X(){
throw 0;
}
};
void f(){
static X x;
}
int main(){
try {
f();
}
catch(int) {
std::cout << "Caught first time" << std::endl;
}
try {
f();
}
catch(int) {
std::cout << "Caught second time" << std::endl;
}
}
Kết quả của chương trình này là
Caught lần đầu tiên
Caught lần thứ hai
Vì vậy, nó được đảm bảo bởi các tiêu chuẩn mà các nhà xây dựng của một đối tượng tĩnh sẽ được gọi là hơn và hơn nữa cho il nó đã hoàn thành? Tôi không thể tìm thấy nơi trong tiêu chuẩn mà nó được đề cập, do đó, một trích dẫn hoặc một tham chiếu đến chương và câu được chào đón rất nhiều.
Hoặc có bất kỳ hành vi không xác định nào có liên quan đến ví dụ của tôi không?
Cảm ơn. Bây giờ tôi biết về "tính năng" phức tạp của C++, tôi sẽ cố gắng lạm dụng nó. –
@ Alexandre C .: tại sao không tạo Singleton! –