Giả sử tôi có:destructor tĩnh
void foo() {
static Bar bar;
}
Liệu C++ đảm bảo với tôi rằng Bar :: Bar() được gọi trên quầy bar, và Bar :: ~ Bar() là không bao giờ kêu gọi thanh? (Cho đến sau khi thoát ra chính).
Cảm ơn!
Giả sử tôi có:destructor tĩnh
void foo() {
static Bar bar;
}
Liệu C++ đảm bảo với tôi rằng Bar :: Bar() được gọi trên quầy bar, và Bar :: ~ Bar() là không bao giờ kêu gọi thanh? (Cho đến sau khi thoát ra chính).
Cảm ơn!
Có. Lần đầu tiên foo()
được gọi là, Bar bar
sẽ được xây dựng. Sau đó nó sẽ có sẵn cho đến khi kết thúc main()
, sau đó nó sẽ bị hủy.
Đó là về cơ bản:
static Bar *bar = 0;
if (!bar)
{
bar = new Bar;
// not "real", of course
void delete_bar(void) { delete bar; }
atexit(delete_bar);
}
Lưu ý tôi nói "cơ bản"; điều này có lẽ không phải là những gì thực sự xảy ra (mặc dù tôi không nghĩ rằng nó quá xa).
3.7.1 Thời hạn lưu trữ tĩnh
1 Tất cả các đối tượng mà không có thời gian lưu trữ năng động cũng không phải là địa phương có thời gian lưu trữ tĩnh. Việc lưu trữ cho các đối tượng này sẽ kéo dài trong suốt thời gian của chương trình (3.6.2, 3.6.3).