std::make_shared初始化传入指针地址还是数字
时间: 2023-11-16 10:05:48 浏览: 40
`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` 的构造函数效率更高。
相关问题
std::make_shared<std::thread> 如何给线程添加参数?
`std::make_shared<std::thread>` 是C++11引入的一种创建`std::shared_ptr`指向`std::thread`的便捷方式,它允许你在初始化时就指定线程要执行的函数和参数。下面是一个示例:
```cpp
#include <iostream>
#include <thread>
#include <memory>
// 定义一个线程执行的函数,接受一个int参数
void threadFunction(int arg) {
std::cout << "Thread started with argument: " << arg << std::endl;
}
int main() {
// 使用std::make_shared创建一个共享指针,并传入线程函数和参数
auto threadHandle = std::make_shared<std::thread>(threadFunction, 123); // 注意这里的逗号分隔函数名和参数
// 启动线程
threadHandle->start();
// 等待线程结束(这一步不是必需的,但这里为了展示)
threadHandle->join();
return 0;
}
```
在这个例子中,`std::make_shared<std::thread>(threadFunction, 123)`会创建一个新的线程,该线程将执行`threadFunction`并传递参数123。当`threadHandle->start()`调用时,线程开始执行。
阅读全文