2012-10-06 35 views
6

Tuổi thọ của thành viên lớp C++ là gì. Ví dụ: tại thời điểm nào thì đối tượng std::fstream của đối tượng Foo được phát hành? Khi nhập destructor hoặc khi rời khỏi destructor? Điều này được định nghĩa trong tiêu chuẩn C++?Thời gian tồn tại của các thành viên hạng C++

struct Foo 
{ 
    std::fstream mystream; 
    ~Foo() 
    { 
     // wait for thread writing to mystream 
    } 
}; 

Trả lời

11

Thành viên mystream dữ liệu bị phá hủy trong sự tàn phá của đối tượng Foo, sau cơ thể của ~Foo() được thực thi. 11 §12.4 C++ [class.dtor]/8 trạng thái:

Sau khi thực hiện cơ thể của destructor và phá hủy bất kỳ đối tượng tự động phân bổ trong cơ thể, một destructor cho lớp X gọi destructors cho X 's trực tiếp không phải biến thể thành viên dữ liệu không tĩnh, destructors cho các lớp cơ sở trực tiếp của X và, nếu X là loại của lớp dẫn xuất nhất, destructor của nó gọi destructors cho các lớp cơ sở ảo của X.

mystream là một tổ chức phi biến, không tĩnh dữ liệu thành viên của Foo (một biến thể thành viên dữ liệu là một thành viên của một công đoàn; Foo không phải là một liên minh).

2

Đó là ngược lại xây cất:

xây dựng: các lớp học cơ sở, các thành viên dữ liệu (mystream xây dựng ở đây), cơ thể constructor

phá hủy: destructor cơ thể, các thành viên dữ liệu (mystream bị phá hủy ở đây), các lớp học cơ sở

Các vấn đề liên quan