std::make_unique解释与例子
时间: 2023-11-16 08:09:40 浏览: 122
好的,我知道了。关于std::make_unique,它是C++11中引入的一个函数模板,用于创建一个指向新对象的std::unique_ptr智能指针。这个函数模板接受任何类型及其构造参数,然后返回指向它的unique_ptr。这就确保了对象在离开作用域时被自动销毁,并且防止了内存泄漏。
下面是一个std::make_unique的例子:
```c++
#include <memory>
#include <iostream>
int main() {
// 创建一个指向整数0的unique_ptr
auto ptr = std::make_unique<int>(0);
// 输出0
std::cout << *ptr << std::endl;
// 创建一个指向一个对象的unique_ptr
auto obj_ptr = std::make_unique<MyObject>("Hello, world!");
return 0;
}
```
上面的例子中,我们首先使用std::make_unique<int>来创建一个指向整数0的unique_ptr,然后使用*运算符访问该指针中的值并输出它。接着,我们使用std::make_unique<MyObject>来创建一个指向MyObject对象的unique_ptr。由于std::unique_ptr自动管理对象的生命周期,我们不需要手动删除这些对象的内存。
相关问题
std::make_shared unique的作用
std::make_shared和std::make_unique都是用于动态内存分配的函数模板,它们可以帮助我们更方便地创建智能指针对象。其中,std::make_shared用于创建std::shared_ptr对象,而std::make_unique用于创建std::unique_ptr对象。
std::make_shared的作用是创建一个std::shared_ptr对象,该对象指向一个动态分配的内存块,并且该内存块中存储了一个对象的值。与手动创建std::shared_ptr对象相比,使用std::make_shared可以更方便地进行内存管理,避免了手动分配和释放内存的麻烦。此外,使用std::make_shared还可以提高程序的性能,因为它可以减少内存分配和释放的次数。
std::make_unique的作用与std::make_shared类似,不同之处在于它创建的是std::unique_ptr对象。std::unique_ptr是一种独占式智能指针,它可以确保在任何时候只有一个指针可以访问该对象。与std::shared_ptr不同,std::unique_ptr不能共享所有权,因此它更适用于那些不需要共享所有权的情况。
下面是一个使用std::make_shared创建std::shared_ptr对象的例子:
```c++
#include <memory>
#include <iostream>
int main() {
auto ptr = std::make_shared<int>(42);
std::cout << *ptr << std::endl; // 输出:42
return 0;
}
```
下面是一个使用std::make_unique创建std::unique_ptr对象的例子:
```c++
#include <memory>
#include <iostream>
int main() {
auto ptr = std::make_unique<int>(42);
std::cout << *ptr << std::endl; // 输出:42
return 0;
}
```
std::make_unique是什么意思
std::make_unique是C++14中引入的一个函数模板,用于创建一个动态分配的unique_ptr对象并返回其指针。它的作用类似于new关键字,但是它可以避免内存泄漏和异常安全问题。使用std::make_unique可以使代码更加简洁和易于维护。下面是一个使用std::make_unique创建动态分配对象的例子:
```c++
#include <memory>
#include <iostream>
int main() {
auto ptr = std::make_unique<int>(42);
std::cout << *ptr << std::endl; // 输出:42
return 0;
}
```
在上面的例子中,我们使用std::make_unique创建了一个动态分配的int类型对象,并将其初始化为42。由于使用了std::make_unique,我们不需要手动释放内存,因为unique_ptr会在其生命周期结束时自动释放内存。
阅读全文