std::make_shared初始化传入指针地址还是数字
时间: 2023-09-24 13:06:39 浏览: 66
### 回答1:
`std::make_shared` 初始化的时候可以传入指针地址或者其他的值(如数字)。它会创建一个新的 `std::shared_ptr` 对象并将其初始化为给定值的指针。例如:
```
int x = 10;
auto p1 = std::make_shared<int>(&x); // p1 指向 x 的地址
auto p2 = std::make_shared<int>(20); // p2 指向新分配的 int 类型的内存,并将值初始化为 20
```
注意:`std::make_shared` 会使用一次内存分配来创建对象和 `std::shared_ptr` 对象本身,这可能比直接使用 `new` 和 `std::shared_ptr` 的构造函数效率更高。
### 回答2:
std::make_shared 是一个标准的C++函数模板,用于将一个指针或其他类型的对象包装在一个std::shared_ptr智能指针中并进行初始化。
在使用 std::make_shared 初始化时,我们需要传递一个指针或者是一个普通对象的地址作为参数。这个地址可以是一个指针变量的地址或者是一个指向堆上分配的对象的指针。
对于指针类型,我们可以传入一个指针变量的地址作为参数。比如,我们可以传入一个 `int*` 类型的指针变量 `ptr` 的地址,即 `&ptr`。这样,在 std::make_shared 函数内部,将会创建一个新的 std::shared_ptr 对象,并用 `ptr` 指向的地址进行初始化。这个新创建的 std::shared_ptr 对象将会管理这个指针指向的内存资源。
另外,我们也可以传递一个堆上分配的对象的指针作为参数。比如,我们可以传递一个 `new int(42)` 返回的指针给 std::make_shared。这样,在 std::make_shared 内部,将会创建一个新的 std::shared_ptr 对象,并用这个指针进行初始化。这个新创建的 std::shared_ptr 对象将会管理这个指针指向的堆上的对象。
总而言之,使用 std::make_shared 初始化时,我们传入的是一个指针的地址或者是一个对象在堆上分配的地址,而不是一个普通的数字。这样,std::make_shared 可以创建一个新的 std::shared_ptr 对象,并用这个地址初始化。
### 回答3:
std::make_shared()函数是C++标准库中的一个模板函数,用于在动态内存中创建并初始化一个shared_ptr对象。它接收可变数量的参数,并根据这些参数的类型自动选择正确的构造函数来创建对象。
在使用std::make_shared()函数时,我们传递的是一个指针类型的参数,而不是指针的地址或数字。这是因为指针类型的参数提供了对象的地址,有助于std::make_shared()函数在内存中创建对象。
例如,我们可以使用std::make_shared()函数来创建一个指向整数的shared_ptr对象。假设我们有一个整数变量num,并希望使用shared_ptr来管理其内存,我们可以这样做:
```cpp
int num = 10;
std::shared_ptr<int> ptr = std::make_shared<int>(num);
```
在这个例子中,std::make_shared<int>()函数接收一个整数变量num作为参数,并使用该参数在动态内存中创建一个整数对象。然后,它返回一个指向这个新创建对象的shared_ptr。在这个过程中,我们没有传递指针的地址或数字,而是直接传递了整数变量num。
因此,回答问题,std::make_shared()初始化的时候传入的参数是以类型的形式传入的,而非指针的地址或数字。