c++ 动态内存2
动态内存
vector<int> * gen_vector(const size_t &size) {
return new vector<int>(size, 0);
}
void get_data((vector<int> *ptr) {
auto iter = ptr->begin();
while(cin>>*iter++ && iter != ptr->end());
}
void display_data(vector<int> *ptr) {
for(const auto &v : *ptr) {
cout<<v<<" ";
}
cout<<endl;
delete ptr;
}
auto ptr = gen_vector(10);
get_data(ptr);
display_data(ptr);
在写get_data的时候犯了一个错误,代码如下
void get_data((vector<int> *ptr) {
auto vec = *ptr; // 这里拷贝了一份ptr指向的vector,所以下面iter访问的是拷贝vector的空间
auto iter = vec.begin(); // 而不是ptr指向的空间。
while(cin>>*iter++ && iter != vec.end());
}
shared_ptr版本
shared_ptr<vector<int>> gen_vector(const size_t &size) {
return make_shared<vector<int>>(size, 0);
}
void get_data(shared_ptr<vector<int>> ptr) {
auto iter = ptr->begin();
while(cin>>*iter++ && iter != vec->end());
}
void display_data(shared_ptr<vector<int>> ptr) {
for(const auto &v : *ptr) {
cout<<v<<" ";
}
cout<<endl;
}
auto ptr = gen_vector(10);
get_data(ptr);
display_data(ptr);