一个类,需要复制,但是在复制函数里因为有new的存在,使得进程内存一直增大,不知道怎么delete这个东西?
void CTrack::copyctrack(CTrack* source_track)
{
Num_Point3DObject = source_track->Num_Point3DObject;
Distance = source_track->Distance;
ptrTrack = new CTrackNode;
ptrTrack->ptrNext = NULL;
CTrackNode* ptr1 = ptrTrack;
CTrackNode* ptr2 = source_track->ptrTrack;
while (ptr2->ptrNext != NULL)
{
ptr1->Point = ptr2->Point;
ptr1->ptrNext = new CTrackNode();//感觉就是这块new的内存没有删除,所以内存一直增加
ptr1 = ptr1->ptrNext;
ptr1->ptrNext = NULL;
ptr2 = ptr2->ptrNext;
}
ptr1->Point.CopyCPoint3D(global_Mission.Terminal);
ptr1->ptrNext = NULL;
}
CTracknode 是一个类,内容如下:
class CTrackNode
{
public:
CTrackNode(void);
void Set_RandomTrackNode_IN_SPACE(CSpace globalSpace);
void Link2Next(CTrackNode* ptr);
void delete_track();
public:
CPoint3D Point;//Point是一个点,包含xyz的坐标;
CTrackNode* ptrNext;
};
CTrack也是一个类:
class CTrack
{
public:
CTrack(void);
~CTrack(void);
void CreateTrack(void);// CreateTrack at random
void _Debug_ShowMe(void);
double get_length(CTrackNode* p, CTrackNode* n, CSpace m);
void GetTrackDistance(void);
void copyctrack(CTrack* source_track);
public:
CTrackNode* ptrTrack;
int Num_Point3DObject;
double Distance;
}
复制函数的目的是为了将一条ctrack的内容复制过去,但是地址不同。
因为主函数里,有一个for循环,循环里有在调用这个函数,而且进程内存2.2G耗尽停止也是在new的那个地方报错,所以感觉应该是new完,没有delete掉。但是,这个ctracknode在new完后进行了循环,就算最后delete掉它,他申请的内存依然没有被delete掉。
你有两处用了new,所以两次用完了也要去释放空间,while循环最后释放点你申请的地方,同时在程序的最后释放你第一次申请的空间
提供拷贝构造函数,和析构函数,已经operator=,在构造函数里面new ,在析构函数里面delete
默认构造函数要把指针初始化为NULL.
建议最好把ec++和more ec++ 看一遍,体系学习一下c++,然后再写程序
用智能指针管理