我为一个 C++ 类实现了一个 C-API,它使用其他对象的共享指针来访问它们。在我的 C-API 中,我当然只能得到原始指针。因此,我将 C-API 中的原始指针“转换”为共享指针,然后将其与我的 C++ 类方法一起使用:
method(std::shared_ptr<dataType>(raw-pointer));
现在我有一个问题,在“方法”的末尾总是调用共享指针析构函数,不幸的是它杀死了我的原始指针指向的对象(我不想要)。那么,如何防止原始指针被杀死?
我已经尝试过 reset() 或 swap() 之类的共享指针函数,但它们都没有让我的原始指针消失......
bool Traffic_doStep(traffic_handle t, environment_handle e, double cycletime) {
if (!valid(t, __FUNCTION__)) return false;
if (!valid(e, __FUNCTION__)) return false;
if (!valid(cycletime, __FUNCTION__)) return false;
try {
t->doStep(std::shared_ptr<Environment>(e), cycletime);
return true;
}
catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
return false;
}
}
预期的结果是原始指针 e 在此函数返回后仍指向有效对象。实际上,原始指针指向一个已删除的对象。