У меня есть класс, который определен так:
struct USERFPOINT
{
POINTFLOAT UserPoint;
POINTFLOAT LeftHandle;
POINTFLOAT RightHandle;
bool isBezier;
};
struct SHAPEOUTLINE {
GLuint OutlineVBO;
int OutlineSize;
int OutlineWidth;
ARGBCOLORF OutlineColor;
};
struct SHAPECONTOUR{
std::vector<USERFPOINT> UserPoints;
std::vector<std::vector<GLdouble>> DrawingPoints;
SHAPEOUTLINE Outline;
};
struct SHAPEGRADIENT{
GLuint TextureId;
bool IsParent;
bool active;
int type;
std::vector<ARGBCOLORF> colors;
};
struct SHAPEDIMENSIONS {
POINTFLOAT Dimensions;
POINTFLOAT minima;
POINTFLOAT maxima;
};
class OGLSHAPE
{
private:
int WindingRule;
GLuint TextureCoordsVBOInt;
GLuint ObjectVBOInt;
UINT ObjectVBOCount;
UINT TextureCoordsVBOCount;
SHAPEGRADIENT Gradient;
SHAPEDIMENSIONS Dimensions;
void SetCubicBezier(USERFPOINT &a,USERFPOINT &b, int ¤tcontour);
void GenerateLinePoly(const std::vector<std::vector<GLdouble> > &input, int width);
public:
std::string Name;
ARGBCOLORF MainShapeColor;
std::vector<SHAPECONTOUR> Contour;
OGLSHAPE(void);
void UpdateShape();
void SetMainColor(float r, float g, float b, float a);
void SetOutlineColor( float r, float g, float b, float a,int contour );
void SetWindingRule(int rule);
void Render();
void Init();
void DeInit();
~OGLSHAPE(void);
};
Вот что я сделал в качестве теста. Я создал глобальный std::vector<OGLSHAPE>
тест.
В функции, которую я использовал, я создал
OGLSHAPE т.
Затем я отправил 50000 копий t в тест.
Затем я немедленно очистил тест и использовал трюк подкачки, чтобы действительно его освободить.
Я заметил, что вся память была должным образом освобождена, как я и ожидал.
Затем я сделал то же самое, но перед тем, как вставить t в тест, я нажал SHAPECONTOUR (который я только что создал без изменения или добавления чего-либо в контур), прежде чем вставить t в тест.
На этот раз после очистки теста было выделено еще 3 мегабайта. Я сделал это снова, выделив вдвое больше, и теперь 6МБ у нас осталось. Использование памяти программой достигло 150 МБ и уменьшилось до 12 МБ, но должно быть 8,5 МБ. Поэтому это должно быть классифицировано как утечка памяти, хотя я не вижу, как. Я не вижу ничего, что могло бы сделать это. SHAPECONTOUR - это просто структура векторов с вложенной структурой векторов.
Почему это может привести к утечке, и как я могу это исправить?
Спасибо