关于在托管属性中设置非托管指针的C ++ / cli

时间:2017-12-09 01:21:31

标签: c++-cli

说我有一个c ++结构:

typedef struct CStruct {
   char * data;
} CStruct;

假设我在C ++ / cli中的托管类中有一个指向C ++结构的指针,它有一个引用结构成员的属性:

public ref class ManagedClass 
{
public:
   CStruct * theStruct;
   ManagedClass(CStruct * strucPtr){ 
       this->theStruct = strucPtr; 
   }
   property String ^ data {
      String ^ get() {
         return gcnew String(theStruct->data);
      }
      void set(String ^ val)
      {
          IntPtr marshalToCharStar = Marshal::StringToHGlobalAnsi(val);
          char * strPtr = static_cast<char *>(marshalToCharStar.ToPointer());
          delete theStruct->data;
          theStruct->data = strPtr;
          Marshal::FreeHGlobal(marshalToCharStar);
      }
   }
}

首先,编组是否正确完成?这里的垃圾收集器应该没问题吗?其次,使用属性获取/设置非托管对象是一个好主意吗?任何垮台?

现在我有一个类似于上述对象的对象,但是成员值正在消失/变成垃圾,我正试图消除可能的原因。

感谢帮助

0 个答案:

没有答案