使用shared_ptr 创建线程
时间: 2024-09-20 09:05:33 浏览: 40
`shared_ptr` 是 C++ 中由 Boost 库引入的一种智能指针类型,它用于管理动态分配的对象,并自动控制对象的生命周期。当你需要在多个线程之间共享一个对象,同时又想避免额外的手动同步或内存泄漏时,可以使用 `std::shared_ptr`。
创建一个 `shared_ptr` 线程并不是直接操作线程,而是通过将对象包装在 `shared_ptr` 中,然后在线程中使用这个对象。以下是一个简单的例子:
```cpp
#include <thread>
#include <memory>
// 假设有一个类 MyClass
class MyClass {
public:
void doSomething() { /* ... */ }
};
void threadFunction(std::shared_ptr<MyClass> myObject) {
// 在这里,myObject 就像是普通的指针一样,但在其内部有引用计数
myObject->doSomething();
}
int main() {
std::shared_ptr<MyClass> sharedObj(new MyClass());
// 创建并启动新线程,传递 sharedObj
std::thread workerThread(threadFunction, sharedObj);
// 主线程继续执行其他任务...
workerThread.join(); // 等待线程结束
return 0;
}
```
在这个例子中,`workerThread` 使用了传递进来的 `sharedObj`,即使主线程结束了,只要还有其他 `shared_ptr` 指向 `MyClass`,对象就不会被删除,直到所有指向它的 `shared_ptr` 都失效。这保证了线程安全。
阅读全文