消除警告"construction of local static object is not thread-safe"
Eliminate warning "construction of local static object is not thread-safe"
我有以下类:
struct globalAllocated
{
void operator delete(void*p)
{
static HANDLE heap= GetHeap();
::HeapFree(heap, 0, p);
}
}
警告 C4640:"堆":本地静态对象的构造不是线程安全的
我想过使用一些与互斥锁的同步,但这似乎很昂贵。
使堆成为私有成员是行不通的,因为运算符删除覆盖必须是静态的,所以堆必须是私有的 - 但是如果我将其声明为静态类成员,我就没有地方可以初始化它。
最好的解决方案是什么?
如果您可以使用 C++11,则需要在那里是线程安全的。 (但是,如果您担心性能问题,也可以通过使用互斥锁轻松实现。
更一般地说:尝试确保在启动多个线程之前调用该函数。 (在许多应用程序中,所需要的只是在静态对象的初始化中的某个位置调用它。
相关文章:
- Why is UINT32_MAX + 1 = 0?
- C++错误:"error: int aaa::bbb is protected within this context"
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- Is !NaN not a NaN?
- 当覆盖存在时调用基本虚拟"binded to object"函数
- Directx 11 - CompileFromFile() is not compiling
- Centos7 g++ "to_string is not in a member of std"
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- "Called Object Type is Not a Function or Pointer" 与 typedef 和类
- glBufferData 失败,并显示: "Array object is not active."
- "Called object 'int' is not a function or a function pointer"错误
- 收到"void* is not a pointer-to-object type"错误,但使用 XCode 时代码完美执行
- 在C++,我收到一条消息"error: 'void*' is not a pointer-to-object type"
- 为什么在返回子对象时"that is the complete object of a subobject"延长对象的生存期?
- 消除警告"construction of local static object is not thread-safe"
- 无法使用单独的着色器程序"<program> object is not successfully linked."
- 这句话"a class is an object even if not instantiated"是什么意思?
- "'void*' is not a pointer-to-object type"没有空白*的代码?
- C++。与代码相关::块 IDE。"object is not declared in this scope"错误