make_shared使用
时间: 2023-09-16 11:13:57 浏览: 83
在C++中,使用`std::make_shared`是创建`std::shared_ptr`对象的一种推荐的方法。它接受可变数量的参数,并在堆上分配一个新的对象,并返回一个指向该对象的`std::shared_ptr`指针。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [make_shared](https://blog.csdn.net/TuxedoLinux/article/details/85042775)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
相关问题
C++ make_shared使用
`std::make_shared` 是 C++11 标准库中的一个函数模板,用于在动态内存中创建对象并返回指向该对象的 `std::shared_ptr` 智能指针。使用 `std::make_shared` 的好处是可以避免手动管理内存,同时也可以提高性能。
`std::make_shared` 的语法如下:
```
template<class T, class... Args>
std::shared_ptr<T> make_shared(Args&&... args);
```
其中,`T` 是要创建的对象的类型,`Args...` 是传递给该类型构造函数的参数。返回一个指向 `T` 类型对象的 `std::shared_ptr` 智能指针。
下面是一个使用 `std::make_shared` 的例子:
```c++
#include <memory>
#include <iostream>
class MyClass {
public:
MyClass(int x) : x_(x) {}
void print() { std::cout << "x = " << x_ << std::endl; }
private:
int x_;
};
int main() {
// 创建 MyClass 对象,并返回指向该对象的 shared_ptr
std::shared_ptr<MyClass> ptr = std::make_shared<MyClass>(10);
ptr->print(); // 输出 x = 10
return 0;
}
```
在上面的例子中,我们使用 `std::make_shared` 创建了一个 `MyClass` 对象,并将其返回给 `std::shared_ptr` 智能指针 `ptr`。然后,我们通过 `ptr` 访问了 `MyClass` 对象的 `print()` 方法,输出了 `x = 10`。
std::shared_ptr 和 std::make_shared 使用实例
当使用C++中的智能指针时,可以使用`std::shared_ptr`和`std::make_shared`来管理动态分配的内存。
下面是一个使用`std::shared_ptr`和`std::make_shared`的示例:
```cpp
#include <memory>
#include <iostream>
class MyClass {
public:
MyClass() {
std::cout << "MyClass constructor called" << std::endl;
}
~MyClass() {
std::cout << "MyClass destructor called" << std::endl;
}
};
int main() {
// 使用std::shared_ptr进行动态内存分配
std::shared_ptr<MyClass> ptr1(new MyClass); std::cout << "The use count of ptr1 is: " << ptr1.use_count() << std::endl;
{
// 使用std::make_shared进行动态内存分配
auto ptr2 = std::make_shared<MyClass>();
std::cout << "The use count of ptr2 is: " << ptr2.use_count() << std::endl;
// 将ptr2赋值给ptr3,引用计数会自动增加
std::shared_ptr<MyClass> ptr3 = ptr2;
std::cout << "The use count of ptr3 is: " << ptr3.use_count() << std::endl;
}
// 这里ptr2和ptr3超出作用域,引用计数减少
std::cout << "The use count of ptr1 is: " << ptr1.use_count() << std::endl;
return 0;
}
```
上述示例中,我们首先使用`std::shared_ptr`手动分配一个`MyClass`对象,并使用`new`关键字进行初始化。然后,我们使用`std::make_shared`来动态分配另一个`MyClass`对象,并自动进行对象的构造和内存管理。
在示例的后续部分,我们展示了智能指针的引用计数特性。当我们将一个`std::shared_ptr`赋值给另一个时,引用计数会增加。当超出作用域后,引用计数会减少。这样可以确保在没有任何对象使用该内存时,内存得到正确释放。
请注意,使用智能指针可以避免显式地调用`delete`来释放内存,从而减少了内存泄漏和悬空指针的风险。
阅读全文