我遇到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/