Все очень просто, я на днях убил пол рабочего дня на поиски бага, о котором читал только в умных книгах.
И бог знает сколько бы еще искал, если бы не случайность.
попробую привести минимально воспроизводимый код.
main.cpp
# include "Ptr.hpp"
# include "Node.hpp"
# include <string>
class GetItemResponse
{
public:
virtual ~GetItemResponse(){}
protected:
std::string a;
};
void main()
{
node();
Ptr<GetItemResponse> ir = new GetItemResponse;
}
Node.hpp
# pragma once
void node();
Node.cpp
# include "Node.hpp"
# include "Ptr.hpp"
class GetItemResponse
{
public:
virtual ~GetItemResponse(){}
protected:
float a;
};
void node()
{
Ptr<GetItemResponse> pt = new GetItemResponse;
}
Ptr.hpp
# pragma once
template<class T>
class Ptr
{
public:
Ptr( T * _t ): ptr(_t){}
~Ptr(){ delete ptr; }
protected:
T * ptr;
};
Если кто думает что это очень редкий случай, то я тоже так думал, пока не начал работать в компани в которой больше одного программиста на проект (а это везде) и пишут они асинхронные приложения.
желаю удачи! и не повторять таких вот ошибок которые так портят настроения