什么时候用unique_ptr请举个例子
时间: 2023-03-25 14:04:20 浏览: 57
当我们需要在程序中动态分配内存时,可以使用unique_ptr来管理这些内存。例如,我们可以使用unique_ptr来管理一个动态分配的数组,如下所示:
```
#include <memory>
#include <iostream>
int main() {
// 创建一个unique_ptr来管理一个动态分配的int数组
std::unique_ptr<int[]> arr(new int[5]);
// 对数组进行赋值
for (int i = ; i < 5; ++i) {
arr[i] = i;
}
// 输出数组的值
for (int i = ; i < 5; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
// unique_ptr会在作用域结束时自动释放内存
return ;
}
```
相关问题
使用unique_ptr和make_unique写一个例子
下面是一个使用unique_ptr和make_unique的简单例子,用于管理动态分配的整型数组:
```c++
#include <iostream>
#include <memory>
int main() {
// 使用make_unique创建一个unique_ptr对象,初始化为指向大小为5的整型数组
std::unique_ptr<int[]> arr = std::make_unique<int[]>(5);
// 对数组进行赋值
for (int i = 0; i < 5; i++) {
arr[i] = i;
}
// 输出数组内容
for (int i = 0; i < 5; i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
在这个例子中,我们使用make_unique函数创建了一个unique_ptr对象,该对象指向了一个大小为5的整型数组。由于我们使用了unique_ptr,我们不需要手动释放数组空间,当unique_ptr对象超出作用域时,会自动释放它所拥有的内存。同时,由于我们使用了动态分配的数组,我们可以在运行时确定数组的大小,这使得我们的程序更加灵活。
unique_ptr使用例子
下面是一个使用unique_ptr的例子:
```c++
#include <iostream>
#include <memory>
class MyClass {
public:
MyClass() {
std::cout << "MyClass Constructor" << std::endl;
}
~MyClass() {
std::cout << "MyClass Destructor" << std::endl;
}
void doSomething() {
std::cout << "doSomething" << std::endl;
}
};
int main() {
std::unique_ptr<MyClass> myClassPtr(new MyClass);
myClassPtr->doSomething();
return 0;
}
```
在这个例子中,我们定义了一个名为MyClass的类,它有一个构造函数和一个析构函数,并且有一个名为doSomething()的成员函数。在main()函数中,我们创建了一个unique_ptr对象myClassPtr,并且通过new操作符分配一个MyClass对象的内存空间并将其传递给unique_ptr的构造函数。我们可以使用箭头运算符(->)调用MyClass中的doSomething()方法。
在程序结束时,myClassPtr将自动删除并释放MyClass对象的内存空间,因为unique_ptr是智能指针,它会自动管理和释放分配的内存空间。