Tôi đã tự hỏi nếu ai đó có thể làm sáng tỏ một số quy trình xử lý bộ nhớ trong C++.Khi nào bộ nhớ được giải quyết liên quan đến các biến tĩnh?
Nếu tôi có một cấu trúc mà tôi tuyên bố tĩnh, như vậy mà constructor của nó là điều đầu tiên để thực hiện và destructor của nó là điều cuối cùng để thực hiện:
struct initializer execute_before_and_after_main {
initializer() { init(); }
~initializer() { cleanup(); }
}
static initializer execute_around_main;
Và sau đó tôi có một cái gì đó như:
class my_class {
my_object objects[100];
}
extern my_class gobal_my_class;
my_class global_my_class;
và chính là không quan trọng ở đây:
int main (int argc, char* argv[]) {
....
}
Khi cleanup()
được gọi, là mảng objects
hiện có chứa bộ nhớ deallocated/không hợp lệ? Có một chuỗi tiêu chuẩn khởi tạo/hủy diệt mà C++ thực hiện ở đây mà ai đó có lẽ có thể chỉ cho tôi?
Cảm ơn
EDIT: Tôi hiểu loại mã là có thể không phải là thực hành tốt nhất, nhưng tôi vẫn tự hỏi nếu hành vi được xác định.
Thời gian để làm quen với cuối [thời gian lưu trữ] (http://en.cppreference.com/w/cpp/language/storage_duration) –
@CaptainObvlious lol Tôi sắp đặt liên kết tương tự đó vào câu trả lời của tôi – aaronman
Không có chuỗi được xác định chuẩn để khởi tạo và hủy các đối tượng có thời gian lưu trữ tĩnh; điều này được gọi là [fiasco thứ tự khởi tạo tĩnh] (http://www.parashift.com/c++-faq/static-init-order.html) – Praetorian