使用unique_ptr和make_unique写一个例子
时间: 2023-12-27 20:03:52 浏览: 73
下面是一个使用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对象超出作用域时,会自动释放它所拥有的内存。同时,由于我们使用了动态分配的数组,我们可以在运行时确定数组的大小,这使得我们的程序更加灵活。
相关问题
make_unique 和 unique_ptr
make_unique 是一个 C++14 中的函数模板,用于创建独占所有权的智能指针 unique_ptr 对象。它的使用方式类似于 std::make_shared,但是它创建的是 unique_ptr 而不是 shared_ptr。
unique_ptr 是 C++11 中引入的一个智能指针,它可以自动管理资源的释放,并且只能有一个 unique_ptr 指向同一个对象。当 unique_ptr 被销毁时,它的析构函数会自动释放它所指向的对象。
使用 make_unique 可以避免手动创建 unique_ptr 对象,并且可以避免内存泄漏等问题。例如:
```
auto ptr = std::make_unique<int>(42);
```
这样就创建了一个独占所有权的智能指针 unique_ptr<int>,它指向一个值为 42 的 int 对象。
需要注意的是,make_unique 目前只在 C++14 中可用,如果编译器不支持 C++14,可以使用类似于下面的代码来创建 unique_ptr 对象:
```
std::unique_ptr<int> ptr(new int(42));
```
unique_ptr shared ptr make_prt
unique_ptr和shared_ptr是C++中的智能指针类型。unique_ptr是一种独占所有权的智能指针,它不允许复制和共享内部的指针。例如,我们可以使用unique_ptr来管理一个动态分配的数组,如下所示:unique_ptr<A[]> ptr1(new A
而shared_ptr是一种允许多个智能指针共享同一个对象所有权的智能指针。例如,我们可以使用shared_ptr来管理一个动态分配的数组,如下所示:shared_ptr<A[]> ptr2(new A
然而,unique_ptr不允许复制,也不允许其他智能指针共享其内部的指针。这意味着我们不能将一个unique_ptr赋值给另一个unique_ptr,但可以使用move函数将其转移给另一个unique_ptr,如下所示:unique_ptr<int> ptr(new int); // unique_ptr<int> ptr2=ptr; 错误,不能赋值 unique_ptr<int> ptr3=move(ptr); //用move进行转移 assert(ptr!=nullptr); //转移后ptr为nullptr [2
另外,还有一种智能指针类型叫做weak_ptr,它通常与shared_ptr类型指针配合使用。weak_ptr类似于shared_ptr的辅助工具,通过weak_ptr,我们可以获取shared_ptr指针的一些状态信息,但不会增加对象的引用计数。 [3
make_shared是C++标准库提供的函数模板,用于创建一个动态分配的对象,并返回对应的shared_ptr指针。例如,我们可以使用make_shared来创建一个int类型的对象,并将其返回给一个shared_ptr指针,如下所示:shared_ptr<int> ptr = make_shared<int>(42);
阅读全文