使用共享指针调用遗留函数

Posted

技术标签:

【中文标题】使用共享指针调用遗留函数【英文标题】:calling legacy function with shared pointer 【发布时间】:2011-03-18 06:52:45 【问题描述】:

我正在尝试使用共享指针调用带有普通指针参数的旧函数,但出现以下错误:

我试图通过一个简单的例子来表达我正在做的事情。我无法将参数更改为 display(),因为它在旧版中并且正在被许多其他模块使用。但是从我的函数中,我使用共享指针来调用 display。这是正确的吗 ?你能建议/建议吗?

#include <iostream>
using namespace std;

#include <boost/shared_ptr.hpp>

void display(int * x)

    cout << endl << "Pointer value is = %x" << *x;

int main()

    boost::shared_ptr<int> ptr( new( int ) );

    *ptr =5;

    display(ptr);
    return 0;

sh.cpp:在函数“int main()”中: sh.cpp:17:错误:无法将参数 '1' 的 'boost::shared_ptr' 转换为 'int*' 到 'void display(

【问题讨论】:

【参考方案1】:

函数是否尝试释放指针?如果没有,最好的办法是使用 shared_ptr 的 get() 方法,如下所示:

display(ptr.get());

【讨论】:

非常感谢您的回答..真的很有帮助..我在同一个术语中还有一个问题..如果我们使用旧代码获取返回 的指针,我可以使用 boost::shared_ptr pData = legacy_function(a, b, c);: error C2440: 'initializing' : cannot convert from 'unsigned char *' to 'boost::shared_ptr' 抱歉对于基本问题,我基本上是c程序员 您应该执行以下操作:boost::shared_ptr&lt;unsigned char&gt;(function_that_returns_pointer());。但是将 shared_ptr 与遗留指针一起使用存在一个微妙的问题:内存可能已经使用 malloc() 分配,应该使用 free() 释放,而 boost shared_ptr 和 shared_array 可能分别使用 delete 和 delete[] 运算符。而且你永远不应该尝试delete内存是malloc()ated 非常感谢!它有效...一个疑问:我们在这里不需要 c++ 类型的类型转换吗?我的意思是像 reinterpret_cast 等?【参考方案2】:

要从boost::shared_ptr 获取原始指针,请使用get() 方法。

【讨论】:

以上是关于使用共享指针调用遗留函数的主要内容,如果未能解决你的问题,请参考以下文章

Pybind - 使用指向派生类的共享指针调用函数

从 C++ 中的共享库调用指向列表的静态指针

c语言中如何一个函数的多次调用

this指针的作用

我啥时候想从原始指针构造一个共享指针

弱指针的reset成员函数是原子的吗?