std::make_shared源码
时间: 2023-12-21 20:06:13 浏览: 28
```cpp
template<class T, class... Args>
shared_ptr<T> make_shared(Args&&... args)
{
return shared_ptr<T>(new T(std::forward<Args>(args)...));
}
```
`std::make_shared`是一个模板函数,用于创建一个指定类型的`std::shared_ptr`对象。它接受任意数量的参数,并使用这些参数来构造指定类型的对象。在内部,`std::make_shared`通过调用`new`运算符来分配内存,并使用传递的参数来构造对象。然后,它将返回一个指向该对象的`std::shared_ptr`。
使用`std::make_shared`的好处是它可以在一次内存分配中同时分配对象和控制块(用于跟踪引用计数等信息)。这样可以提高性能并减少内存碎片。此外,`std::make_shared`还可以确保异常安全,因为它在内存分配和对象构造之间没有中间状态。
相关问题
std::make_shared参数
std::make_shared 是 C++11 中的一个函数模板,用于创建共享指针(shared pointer)。它接受可变数量的参数,并使用这些参数来构造一个指定类型的对象,并返回一个指向该对象的共享指针。
std::make_shared 的参数是被构造对象的类型和构造参数。例如:
```cpp
std::shared_ptr<int> ptr = std::make_shared<int>(42);
```
上面的代码中,我们使用 std::make_shared 创建了一个指向整数的共享指针,构造参数是整数值 42。在这种情况下,std::make_shared 通过构造函数创建一个 int 类型的对象,并返回指向该对象的共享指针。
需要注意的是,std::make_shared 会动态分配内存以存储对象,并返回一个指向该内存的共享指针。这意味着我们不需要显式地使用 new 运算符来分配内存。此外,使用 std::make_shared 创建的共享指针是更安全的,可以避免资源泄漏和空悬指针等问题。
c++ std::make_shared
`std::make_shared` 是 C++ 标准库中的一个函数模板,用于创建一个共享指针(shared pointer)对象。它接受参数并返回一个指向动态分配的对象的共享指针。
使用 `std::make_shared` 可以方便地创建共享指针,而不需要显式调用 `new` 进行内存分配。该函数模板接受任意数量的参数,并将这些参数传递给对象的构造函数来初始化对象。
以下是 `std::make_shared` 的示例用法:
```cpp
#include <memory>
class MyClass {
public:
MyClass(int value) : m_value(value) {
// 构造函数
}
private:
int m_value;
};
int main() {
// 使用 std::make_shared 创建共享指针
std::shared_ptr<MyClass> ptr = std::make_shared<MyClass>(42);
return 0;
}
```
在上面的示例中,我们使用 `std::make_shared` 创建了一个共享指针 `ptr`,并传递了参数 `42` 给 `MyClass` 的构造函数来初始化对象。这样就可以通过 `ptr` 来访问这个动态分配的对象了。