我有一个托管C ++应用程序使用的本机c ++库。本机库是在没有CLR支持的情况下编译的,也是带有它的托管C ++应用程序(/ CLR编译器选项)。
当我在本机库中使用std :: mutex时,删除拥有的本机类时会出现堆损坏。托管C ++阻止了mutex.h的使用,所以我猜这可能是原因的一部分。
演示此问题的最小本机类是:
部首:
#pragma once
#include <stdio.h>
#ifndef __cplusplus_cli
#include <mutex>
#endif
namespace MyNamespace {
class SomeNativeLibrary
{
public:
SomeNativeLibrary();
~SomeNativeLibrary();
void DoSomething();
#ifndef __cplusplus_cli
std::mutex aMutex;
#endif
};
}
实现:
#include "SomeNativeLibrary.h"
namespace MyNamespace {
SomeNativeLibrary::SomeNativeLibrary()
{}
SomeNativeLibrary::~SomeNativeLibrary()
{}
void SomeNativeLibrary::DoSomething(){
printf("I did something.\n");
}
}
托管C ++控制台应用程序:
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Unit Test Console:");
MyNamespace::SomeNativeLibrary *someNativelib = new MyNamespace::SomeNativeLibrary();
someNativelib->DoSomething();
delete someNativelib;
getchar();
return 0;
}
尝试删除someNativeLib指针时发生堆损坏调试错误。
我可以做些什么来安全地在本机库中使用std :: mutex,或者我可以使用替代方案吗?在我的实时代码中,互斥体用于确保只有一个线程访问std :: vector。