![]() |
1
1
我能看到的最大问题是谁负责删除指针引用的对象? 重用同一个对象不一定是线程问题,但是如果您负责调用非托管对象上的delete,则需要在对象中实现某种引用计数。 如果对象是只读的,使用具有相同指针的多个对象可能更容易。如果它们具有可以更改的状态,那么如果多个对象持有指向该状态的指针,那么您需要了解进行更改的影响。 你可能还想看看c++/CLI(托管C++)来在C语言和非托管库之间提供一个层,并在那里进行翻译/操作的艰苦工作,并提供一个更简单的API来处理。 |
![]() |
2
1
整个代码看起来不正确。 使用getparent函数似乎意味着您有一个类似树的结构。让我对您的代码做一些猜测,它们可能是错误的。
我建议您不要逐节点创建.NET代码,而是为整个树/图结构创建一个.NET包装器,并提供一个.NET API,它可以将非托管API指针作为参数传递,但严格处理分配/解除分配,以避免出现内存问题。这将避免不必要地分配新的内存结构,只需分配已经存在的内容,即getParent函数。 |
![]() |
3
0
我有一个相关的问题。已显式删除非托管对象。所以我所做的是为所有包含静态字典的可用包装器实例的包装器创建一个基类。对象在构造函数中添加到字典,在wrapperBase.delete()方法中删除。注意,对于这种方法有显式的delete()方法是很重要的,否则GC将永远不会释放包装器实例,因为引用了静态字典。 |
![]() |
Kris · 有没有办法获得可变结构字段的“引用” 3 年前 |
![]() |
Jora Karyan · IF语句未按预期引发错误 3 年前 |
![]() |
nedzad · 如何访问引用Firebase中其他对象的对象 6 年前 |
![]() |
Empha · 从成员函数对对象所做的更改不会持续。范围/参考问题? 6 年前 |