std::unique_ptr怎么用
时间: 2023-12-06 08:59:48 浏览: 26
std::unique_ptr是C++11标准中新增的智能指针之一,用于管理动态分配的内存,可以自动释放内存,避免内存泄漏。使用std::unique_ptr时需要注意以下几点:
1. unique_ptr对象只能有一个所有权,不能进行复制或赋值操作,但可以进行移动操作。
2. 不能使用delete操作释放std::unique_ptr指向的内存,因为这会导致double free错误。
下面是一个使用std::unique_ptr的例子:
```
#include <iostream>
#include <memory>
int main()
{
// 创建一个unique_ptr指向动态分配的int类型内存
std::unique_ptr<int> p(new int(42));
// 输出指向的值
std::cout << *p << std::endl;
// 释放内存
p.reset();
return 0;
}
```
在上面的例子中,我们首先创建了一个std::unique_ptr对象p,指向动态分配的int类型内存,然后使用*p输出该内存中存储的值。最后使用p.reset()释放内存。注意,reset()函数会自动释放std::unique_ptr指向的内存,并将指针置为nullptr。
相关问题
std::unique_ptr使用示例
当使用std::unique_ptr时,您可以按照以下示例来初始化和使用它:
```cpp
#include <iostream>
#include <memory>
class MyClass {
public:
MyClass() {
std::cout << "MyClass created." << std::endl;
}
~MyClass() {
std::cout << "MyClass destroyed." << std::endl;
}
void doSomething() {
std::cout << "Doing something." << std::endl;
}
};
int main() {
// 初始化一个std::unique_ptr
std::unique_ptr<MyClass> ptr(new MyClass());
// 使用箭头运算符来调用成员函数
ptr->doSomething();
// 当指针超出范围时,std::unique_ptr会自动释放内存
return 0;
}
```
在上面的示例中,我们首先创建了一个名为MyClass的类。然后,在main函数中,我们使用std::unique_ptr来初始化一个指向MyClass对象的指针。当我们使用箭头运算符(->)来调用成员函数doSomething时,它会输出"Doing something."。在程序结束时,由于std::unique_ptr的析构函数会自动释放内存,所以输出会显示"MyClass destroyed."。
std::unique_ptr
std::unique_ptr 是 C++11 中引入的一种智能指针,它是一种独占式拥有(ownership)的智能指针,即同一时间只能有一个 unique_ptr 指向一个对象。当 unique_ptr 被销毁时,它所指向的对象也会被销毁。
unique_ptr 的主要特点如下:
1. unique_ptr 不能被复制,只能通过移动语义转移所有权。
2. unique_ptr 可以指向动态分配的内存,也可以指向栈上的对象。
3. unique_ptr 可以自定义删除器(deleter),用于释放资源。
使用 unique_ptr 可以避免手动管理内存,从而减少内存泄漏和悬空指针等问题。同时,由于 unique_ptr 的独占式拥有特性,可以有效地避免多个指针同时操作同一个对象的问题。
下面是一个使用 unique_ptr 的示例代码:
```
#include <memory>
#include <iostream>
int main() {
std::unique_ptr<int> p(new int(42));
std::cout << *p << std::endl; // 输出 42
return 0;
}
```