玖叶教程网

前端编程开发入门

C++智能指针unique_ptr指向数组(c++11智能指针)

C++里面的数组,其实就是一个指针。

unique_ptr同样可以用来保存数组的指针。

void test() {
    
    unique_ptr<MyClass[]> p{ new MyClass[3] };

    for (int i = 0; i < 3; i++) {
        p[i].hello();
    }
    return;

}


在C++14里面也可以使用make_unique函数。

void test() {
    
    unique_ptr<MyClass[]> p = make_unique<MyClass[]>(3);

    for (int i = 0; i < 3; i++) {
        p[i].hello();
    }
    return;

}


还可以使用参数传递和返回。

unique_ptr<MyClass[]> func(unique_ptr<MyClass[]> p, size_t n) {
    for (size_t i = 0; i < n; i++) {
        p[i].hello();
    }
    return p;
}

void test() {
    
    unique_ptr<MyClass[]> p = make_unique<MyClass[]>(3);
    func(std::move(p), 3);
    cout << "before return" << endl;
    return;

}

这边由于没有提供变量给func()函数的返回值,所以在输出"before return"之前,那三个对象就被释放了。


如果我们提供一个变量给func()接受返回值,这个指针的释放就会到return才释放。

unique_ptr<MyClass[]> func(unique_ptr<MyClass[]> p, size_t n) {
    for (size_t i = 0; i < n; i++) {
        p[i].hello();
    }
    return p;
}

void test() {
    
    unique_ptr<MyClass[]> p = make_unique<MyClass[]>(3);
    p = func(std::move(p), 3);
    cout << "before return" << endl;
    return;

}


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言