2014-11-07 3 views
1

Я используюMSVC станд :: _ Pad не виртуальный деструктор

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?

+5

[Представляется преднамеренным] (https://connect.microsoft.com/VisualStudio/feedback/details/809540/c-warnings-in-stl-thread). –

ответ

2

Обновление не требуется.

Это предупреждение, которое может иметь важное значение при использовании виртуальных функций. Если вы выделяете память в производном классе, вам нужен виртуальный деструктор и освобождение памяти при уничтожении объекта. Используя std :: mutex, вы в безопасности (огромный отказ от ответственности здесь).

Вы избавляетесь от этого предупреждения, используя #pragma warning. Если рассматривать предупреждения как ошибки у вас есть, чтобы избавиться от него, но никогда не понизить уровень предупреждений компилятора:

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

Surround предупреждение с осторожностью, вы не хотите, чтобы отключить предупреждения для всего файла, вы можете пропустить некоторые важные предупреждения.

Смежные вопросы