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;
}