我希望将托管缓冲区作为混合类中的成员:
class A {
cli::array<Byte> m_managedBuffer;
}
这导致:
错误C3265:无法在非托管“A”中声明托管“m_managedBuffer”
所以我尝试使用auto_gcroot:
class A {
auto_gcroot<cli::array<Byte> ^> m_managedBuffer;
}
并收到以下错误:
错误C2106:'=':左操作数必须是l值
我的解决方案是使用托管包装器
ref class ByteArray
{
public:
ByteArray(size_t size) {
m_bytes = gcnew cli::array<Byte>(size);
}
cli::array<Byte> ^ m_bytes;
};
我不喜欢这个,因为它引入了一个间接级别来获取实际的缓冲区,而且,当我想固定托管缓冲区(pin_ptr)时 - 我该怎么做?我可以在没有固定外部ByteArray对象的情况下固定内部m_bytes memeber吗?
解决方案:使用gcroot而不是auto_gcroot。托管字节数组 将由GC清理,不必在auto_gcroot下。