1

我正面临 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!

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

4

1 回答 1

0

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

std::shared_ptr 是一个智能指针,它通过指针保留对象的共享所有权。几个 shared_ptr 对象可能拥有同一个对象。当以下任一情况发生时,对象将被销毁并释放其内存

最后剩下的拥有该对象的 shared_ptr 被销毁;最后剩下的拥有该对象的 shared_ptr 通过 operator=或 reset() 分配另一个指针。

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

于 2020-01-06T13:02:18.313 回答