2009-05-18 22 views
6

Khi đọc câu trả lời cho số question Tôi nghi ngờ về việc xây dựng mặc định các đối tượng trong vectơ. Để kiểm tra nó, tôi đã viết mã kiểm tra sau:Mặc định việc xây dựng các phần tử trong một vector

struct Test 
{ 
    int m_n; 

    Test(); 

    Test(const Test& t); 

    Test& operator=(const Test& t); 
}; 

Test::Test() : m_n(0) 
{ 
} 

Test::Test(const Test& t) 
{ 
    m_n = t.m_n; 
} 

Test& Test::operator =(const Test& t) 
{ 
    m_n = t.m_n; 
    return *this; 
} 


int main(int argc,char *argv[]) 
{ 
    std::vector<Test> a(10); 
    for(int i = 0; i < a.size(); ++i) 
    { 
     cout<<a[i].m_n<<"\n"; 
    } 

    return 0; 
} 

Và chắc chắn đủ, hàm tạo mặc định của cấu trúc thử nghiệm được gọi khi tạo đối tượng vectơ. Nhưng những gì tôi không thể hiểu là làm thế nào để STL khởi tạo các đối tượng tôi tạo ra một vector của datatype cơ bản như vector của ints kể từ khi có constructor mặc định cho nó? tức là tất cả các int trong vector có giá trị 0 như thế nào? không phải là rác?

Trả lời

10

Nó sử dụng tương đương với hàm tạo mặc định cho int, là số không khởi tạo chúng. Bạn có thể làm điều đó một cách rõ ràng:

int n = int(); 

sẽ đặt n bằng không.

Lưu ý rằng việc xây dựng mặc định chỉ được sử dụng và được yêu cầu nếu véc tơ được đưa ra kích thước ban đầu. Nếu bạn nói:

vector <X> v; 

không yêu cầu X có hàm tạo mặc định.

+0

Có vẻ như chúng ta có rất nhiều thời gian trong tay, hôm nay :) – xtofl

+0

Đó là niềm vui của cuộc suy thoái :-( –

+0

Tôi không biết điều đó ... Chúng ta gọi int là gì? Chúng tôi không có khởi tạo mặc định cho các loại dữ liệu cơ bản – Canopus

1
std::vector<Type> a(10);  // T could be userdefined or basic data type 

Vector cơ bản gọi default cho kiểu mà nó trỏ: Type()

  • nếu nó là kiểu dữ liệu cơ bản như int, đôi đang có sau đó int(), đôi() {int () sẽ nhận giá trị 0}
  • nếu kiểu dữ liệu do người dùng xác định thì hàm tạo mặc định sẽ được gọi.
Các vấn đề liên quan