MSVC std :: _ Pad没有虚拟析构函数

时间:2014-11-07 15:16:16

标签: c++ visual-c++ c++11 windows-8

我正在使用

Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50727.1 for x64

当我做的时候

#include <mutex>
#include <condition_variable>

我得到了

c:\program files (x86)\microsoft visual studio 11.0\vc\include\thr\xthread(172) : error C4265: 'std::_Pad' : class has virtual functions, but destructor is not virtual
         instances of this class may not be destructed correctly

我是否需要升级到较新版本的MSVC?

1 个答案:

答案 0 :(得分:2)

您不需要更新。

使用虚拟功能时,这是一个很重要的警告。如果在派生类中分配内存,则需要一个虚拟析构函数并释放内存以消除对象。使用std :: mutex你很安全(这里有很大的免责声明)。

您可以使用 #pragma warning 删除此警告。如果将警告视为错误,则必须将其删除,但不要降低编译器警告级别:

#pragma warning(push)
#pragma warning(disable:4265)
#include <mutex>
#pragma warning(pop)

小心处理警告,您不想禁用整个文件的警告,您可能会错过一些重要警告。