std::make_unique是C++14标准库中提供的一个函数模板,用于创建动态分配内存的对象,并以unique_ptr类型智能指针管理分配内存。
具体来说,std::make_unique函数模板接受任意数量的构造函数参数,并返回一个unique_ptr类型指针,该指针所管理的指向动态分配的对象。在这个过程中,std::make_unique会使用new表达式分配内存,并调用对象的构造函数对内存进行初始化。返回的unique_ptr类型指针会在智能指针销毁时自动释放所管理的内存空间。
以下是一个示例代码片段,演示如何使用std::make_unique函数动态分配对象:
#include <memory>
#include <iostream>
class MyClass
{
public:
MyClass(int a, float b)
{
std::cout << "Constructor called with parameters: " << a << ", " << b << std::endl;
// Other initialization code...
}
};
int main()
{
// Create a unique_ptr type pointer managed by std::make_unique function
auto ptr = std::make_unique<MyClass>(10, 20.5);
// Use the created object
// ...
return 0;
}
在上面的示例中,我们使用std::make_unique函数模板创建了一个MyClass类型的对象,并传递了两个构造函数参数10和20.5。该函数将会动态分配内存并返回一个unique_ptr类型指针,在main函数退出后自动释放分配的内存空间。
需要注意的是,如果编译环境不支持C++14标准,则无法使用std::make_unique函数模板。此时,可以用std::unique_ptr结合new表达式手动分配内存。同时也要避免在函数返回时,将unique_ptr对象作为函数返回值传递给其他指针或者析构了unique_ptr对象后,任何非空指针仍然指向已释放掉的内存,引起未定义行为的问题。