Список статей в категории C++

Не могу скомпилировать код с __try...__except?

Не могу скомпилировать код с __try...__except?

При компиляции кода в Visual Studio с __try...__except возникает ошибка: "error C2712: cannot use __try in functions that require object unwinding". Решить данную проблему можно разными путями:

  • Вынести код в отдельную функцию без параметров.
  • Сделать так, чтобы внутри блока не использовались переменные или параметры без деструкторов.
  • Использовать параметр компиляции /GX-.

Обычно код выносится в отдульную функцию, которая при выходе не вызыва

Теги: C++ Ошибки

delete и предекларация класса(warning C4150)

Используя предекларацию класса необходимо быть острожным. Если вызывать delete для предекларированного класса, то получите warning C4150. Это опасно тем, что деструктор для него не вызовется, т.к. объявление класса неизвестно.

Небольшой пример:

H-файл класса A.

class B;
class A
{
public:
A();
~A()
{
	delete pB; // warning C4150
}
private:
B* pB;
};

Теги: C++

Система отчётов о крешах

CrashRpt - бесплатная библиотеку для отлавливание креш репортев для Windows. Библиотека умеет создавать отчёты, отправлять по почте или через web, собирать mini dump.

CrashRpt

Теги: C++ Ошибки

Виртуальные методы в Конструкторе и Деструкторе C++

В конструкторе и деструкторе всегда вызовутся виртуальные методы самого класса:

class A
{
public:
	virtual ~A()
	{
		Free();
		printf("~A\n");
	}
	virtual void Free()
	{
		printf("A::Free\n");
	}
};
class B: public A
{
public:
	virtual ~B()
	{
		Free();
		printf("~B\n");
	}
	virtual void Free()
	{
		printf("B::Free\n");
	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	A* b = new B();
	delete b;
	return 0;
}

Вывод:

B::Free
~B
A::Free
~A

Теги: C++

FFmpeg крешится в Release

Если FFmpeg крешится в Release под Windows, то в настройках проекта Visual Studio для линковки включите "References: Keep Unreferenced Data (/OPT:NOREF)" или пропишите /OPT:NOREF в командной строке.

Теги: C++ FFmpeg