Đã xảy ra sự cố trong chương trình của tôi và tôi không thể tìm thấy nó có xảy ra hay không. Và nếu nó là, tôi không hiểu tại sao ..Tại sao trình phá hủy được gọi khi khởi tạo và thay đổi kích cỡ một vectơ của các đối tượng?
Dưới đây là các mã:
#include <iostream>
#include <vector>
using namespace std;
class A{
public:
A();
~A();
};
A::A(){
cout << "creating" << endl;
}
A::~A(){
cout << "deleting" << endl;
}
int main(void){
vector<vector<A > > vec;
vec.resize(5);
for(int i = 0; i < 5; ++i){
vec[i].resize(5);
}
cout << "END" << endl;
return 0;
}
Và đây là kết quả:
creating
deleting
creating
deleting
creating
deleting
creating
deleting
creating
deleting
END
deleting
deleting
[..more deleting here]
Tôi hiểu tại sao các destructor được gọi sau khi " END "tin nhắn, nhưng trước đó, tôi không. Tôi nghĩ rằng khi vector thay đổi kích cỡ, hàm tạo của lớp được gọi, nhưng tại sao hàm hủy?
Bạn quên định nghĩa người dùng bản sao ctor. Nếu bạn làm (với đầu ra) và đặt một đầu ra sau mỗi cuộc gọi để thay đổi kích thước(), bạn sẽ thấy những gì đang xảy ra. –