我遇到的问题是,当类CLimb运行其析构函数时,如果成员*parentNULL,则在调用析构函数之后但在执行主体之前,收到“访问冲突写入位置0xcccccccc”错误。

肢体

class CLimb
{
public:
    CLimb(void);
    CLimb(CLimb *_parent);
    ~CLimb(void);

    float cut;
    float bone;
    float resistance;

    CLimb *parent;
};


肢体

#include "limb.h"


CLimb::CLimb(void) :
    cut(0),
    bone(0),
    resistance(0)
{
    parent = NULL;
}

CLimb::CLimb(CLimb *_parent) :
    cut(0),
    bone(0),
    resistance(0)
{
    parent = _parent;
}

CLimb::~CLimb(void)
{
}


我还想知道我是否有两个实例limb01limb02,其中limb02limb01的父级,如果limb02被删除,limb01->parent现在指向错误的地址。我该如何解决?我还必须添加一个*child指针吗?

最佳答案

智能指针是一种解决方案。特别是,您可以在此处使用弱指针。当指向对象的引用计数降至零(即删除后)时,弱指针将自动重置。

07-24 09:28