托管类中的本机指针
Native pointers in managed class
我最近在做一些c++/CLI编程,以便将我们公司的一些本地c++类集成到。net中。我的问题可能听起来微不足道,但这是我一直不确定的一件事:
如果有一个带有本机指针的ref类,则写入
public ref class ManagedClass {
private:
NativeClass* pObj1;
NativeClass* pObj2;
void DoStuff(NativeClass* obj);
public:
ManagedClass();
bool Activate();
}
和类似
的构造函数ManagedClass::ManagedClass() : pObj1(new NativeClass()), pObj2(new NativeClass()) {;}
该类的实例将在托管堆上创建。但是,pObj1
和pObj2
确实指向在本机堆上创建的对象?所以使用这些指针不需要固定,即使它们是托管类的成员?特别是,如果DoStuff
函数调用外部本机库函数,则写入
void ManagedClass::DoStuff(NativeClass* obj) {
int returnCode = External::Function(obj);
if (returnCode == 0) return true;
else return false;
}
有没有必要写一些像pin_ptr<NativeClass> pinPtr = obj
等?我想情况是不同的,如果一个引用指针是需要的;然而,在这里,我理解指针本身的位置可能会因内存重新分配而变化,但它的内容,即本机堆上的内存地址,保持有效,因为垃圾收集器不会触及该内存。这是正确的,像上面的代码安全使用吗?谢谢你的帮助!
对于你的问题,你发布的代码是正确的,将工作。
在我看来,使用c++ CLI作为c++本地类的包装器会更好(更干净更安全),因此所有公共方法应该只接收管理对象作为参数,否则只需使用COM
相关文章:
- 从C++本机插件更新Vector3数组
- GCC本机矩阵运算库
- VC++本机单元测试,找不到调试符号
- 在这种情况下,java对象是否可以调用本机函数
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 无法将标准库导入本机 android 项目中的头文件
- 使用本机 C++ 应用程序中的 C# 代码
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 C++/CLI 对象指针传递给本机对象方法
- 管理到本机值类转换:强制转换指针是否安全?
- 将ref类对象(Uri^)作为本机指针参数(IUriRuntimeClass*)传递
- 未分配正在释放的本机node.js插件错误指针
- 警告C4150在尝试包装本机C 类时,指向不完整类型的指针删除
- 如何将 java 函数指针传递给 c++ 本机代码
- 获取本机指针时C++错误 C2440
- JNA 本机函数调用和具有双**指针/数组内存分配的结构
- 通过.NET中的指针从本机方法返回数据
- 将本机指针强制转换为托管对象
- 托管类中的本机指针