Skip to content

补充部分

智能指针

unique_ptrshared_ptrweak_ptrauto_ptr

auto_ptr 在 C++11 中被废弃

auto_ptr

new 语句创建的对象,在 auto_ptr 指针销毁的时候,指针指向的对象也会被销毁

所有权转移: pa 是一个 auto_ptr 指针,指向对象 obj。现在一个新的 auto_ptr 指针 pb 指向对象 obj,则 pa 指针会失效(变成 nullptr

原理:在拷贝(赋值)过程中,直接剥夺原对象对内存的控制权,转交给新对象,然后将原指针置为 nullptr

实际上就是把原来的指针变成 NULL,然后新建一个指针

int main() {
    auto_ptr<int> p(new int(10));
    cout << *p << endl;
    printf("------------------------------------------\n");

    auto_ptr<string> lang[5] = {
            auto_ptr<string>(new string("C")),
            auto_ptr<string>(new string("C++")),
            auto_ptr<string>(new string("Java")),
            auto_ptr<string>(new string("Rust")),
            auto_ptr<string>(new string("Python"))
    };

    for(int i=0; i<5; i++){
        cout << *lang[i] << endl;
    }
    printf("------------------------------------------\n");

    auto_ptr<string> pa;
    pa = lang[2];// 剥夺所有权
    for(int i=0; i<5; i++){
        cout << *lang[i] << endl;
    }

    return 0;
}

image-20221112113137512