c++ - 在多个线程/函数之间使用shared_ptr-IDS Peak API

标签 c++ shared-ptr ids

我遇到2个函数(HTTPlib库的main和svr.Get(...))之间的share_ptr问题。

我使用以下方法声明了指针:

std::shared_ptr<peak::core::DataStream> dataStream;

我正在使用main初始化它:
dataStream = device->DataStreams().at(0)->OpenDataStream();

当我在另一个函数(HTTPLIB库的GET函数)上检索它时,地址似乎是正确的,但该值不是有人值守的:
EXCEPTION: Error-Code: 10 (PEAK_RETURN_CODE_INVALID_HANDLE) | Error-Description: dataStreamHandle is invalid!

指针似乎在函数之间被取消引用。
我哪里错了?有什么正确的方法来影响它并在另一个函数中对其进行检索?

最佳答案

由于所有权转移,指针引用的操作对象不再可用。根据CPP manual:

std::shared_ptr is a smart pointer that retains shared ownership of an object through a pointer. Several shared_ptr objects may own the same object. The object is destroyed and its memory deallocated when either of the following happens:

the last remaining shared_ptr owning the object is destroyed; the last remaining shared_ptr owning the object is assigned another pointer via operator= or reset().


因此,这不是库问题,而是分配错误。

关于c++ - 在多个线程/函数之间使用shared_ptr-IDS Peak API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59415034/

相关文章:

c++11 - 将一个 shared_ptr 分配给另一个

c++ 如何访问原子非 POD 成员变量?

c++ - 如何在我的主应用程序中加载一个 dll 会导致 100 个 CPU 负载?

c++ - 依赖从任何数字类型(unsigned、int、...)到 double 的隐式提升是否安全?

c++ - std::string 什么时候重新分配内存?

c++ - 为什么比较 2 个字符串没有给出预期的结果?

javascript - 试图在 C++ 中从 JS 重新创建这段代码

c++ - 使用 boost::shared_ptr 重载构造函数