gpt4 book ai didi

c++ - 如何将C++对象的地址传递给C

转载 作者:太空宇宙 更新时间:2023-11-04 02:04:58 26 4
gpt4 key购买 nike

我使用的是 Visual Studio 2013 和 C++11。我想将 C++ 对象的地址传回 C。C 代码会将其视为不透明句柄; C 永远不会引用它。唯一的用途是将它传回 C++,在那里它将再次用作指向对象的指针。

我发现如果我在 C++ 中创建对象并将其传递回 C,该对象将被销毁,因为它超出了范围。作为解决方法,我创建了一个全局变量来保存该对象,这样它就不会在返回 C 时被销毁。最佳做法是什么?我应该使用像 shared_ptr 这样的引用计数指针类型吗?如何?我不喜欢转换为 size_t 之类的想法。

以下是试图证明这个问题。代码无效。

extern "C" _declspec(dllexport) void __stdcall SwbHttpListenW(const wchar_t *route, SwbHttpListen **listener)
{
*listener = &SwbHttpListen(route); // new will work but how about without new?
}

[编辑代码以重新寻求不使用 new 的解决方案。]

最佳答案

如何使用 new 运算符在堆上分配 C++ 对象,并使用与符号 (&) 运算符获取其地址?通过堆分配对象,您可以确保它永远不会被删除,直到您实际对其使用 delete 运算符,并且地址可以作为 int 存储/传递。

一个简单的例子:

int main() {

Person *a = new Person("Paul");
doSomething(a); //Passes the memory address of a to the function doSomething



//...and once you're finished using the object, you have to:
delete a;

return 0;
}

关于c++ - 如何将C++对象的地址传递给C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21818884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com