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);
原文地址:https://www.cnblogs.com/yuandonghua/p/15636090.html