std::make_unique与g2o::make_unique
时间: 2024-05-19 16:08:44 浏览: 13
std::make_unique是C++14标准引入的一个函数模板,用于创建一个独占所有权的智能指针std::unique_ptr的对象。它接受一个可变数量的参数,并返回一个指向动态分配的对象的unique_ptr。
g2o::make_unique是g2o库中定义的一个函数模板,也用于创建一个独占所有权的智能指针g2o::unique_ptr的对象。它与std::make_unique的功能类似,但在C++11标准下提供了相同的功能。
这两个函数模板的作用是为了方便地创建独占所有权的智能指针对象,避免手动管理内存和资源释放的麻烦。它们在使用上非常类似,只是在不同的库中定义。
相关问题
std::make_unique解释与例子
好的,我知道了。关于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_unique返回值校验
std::make_unique是C++14中引入的一个函数模板,用于创建一个独占所有权的智能指针std::unique_ptr,并将其初始化为一个动态分配的对象。它的返回值是一个std::unique_ptr指针。
在使用std::make_unique时,我们通常需要对其返回值进行校验,以确保内存分配成功。如果内存分配失败,std::make_unique将抛出std::bad_alloc异常。
以下是一个使用std::make_unique的示例,同时对其返回值进行校验:
```cpp
#include <iostream>
#include <memory>
int main() {
std::unique_ptr<int> ptr = std::make_unique<int>(42);
if (ptr) {
std::cout << "Memory allocation successful." << std::endl;
std::cout << "Value: " << *ptr << std::endl;
} else {
std::cout << "Memory allocation failed." << std::endl;
}
return 0;
}
```
在上述示例中,我们使用std::make_unique创建了一个指向整数的std::unique_ptr,并将其初始化为值为42的整数。然后,我们对返回值进行了校验,如果内存分配成功,则输出相应的信息和值;如果内存分配失败,则输出相应的失败信息。