我想知道是否有人可以闡明在C++中釋放內存過程。何時內存釋放與靜態變量有關?
如果我有我聲明靜態的結構體,使得它的構造是執行的第一件事,析構函數是執行的最後一件事:
struct initializer execute_before_and_after_main {
initializer() { init(); }
~initializer() { cleanup(); }
}
static initializer execute_around_main;
然後,我有這樣的事情:
class my_class {
my_object objects[100];
}
extern my_class gobal_my_class;
my_class global_my_class;
和主在這裏並不重要:
int main (int argc, char* argv[]) {
....
}
當cleanup()
被調用,是objects
數組現在包含釋放/無效內存?是否有一個標準的初始化/破壞序列,C++在這裏實現,有人可能指向我?
感謝
編輯:我理解這種類型的代碼是可能不是最好的做法,但如果行爲定義,我仍然不知道。
時間來熟悉初始化的全局我的課被破壞第一[存儲時間](http://en.cppreference.com/w/cpp/language/storage_duration) –
@CaptainObvlious大聲笑我正要把我的回答中相同的鏈接 – aaronman
沒有標準的定義序列的初始化和破壞靜態存儲持續時間的對象;這被稱爲[靜態初始化順序失敗](http://www.parashift.com/c++-faq/static-init-order.html) – Praetorian