我的本应是简单的c++代码有点问题。
我写了一个类来描述一个成员(作为社交媒体网络成员),一个成员有std::关注者列表和std::following列表,这两种类型都是Member*,他可以跟随/不跟随其他成员。
以下是完整的课程:
成员H
class Member {
private:
bool isCopy;
static int counter;
int id;
list<Member*> following;
list<Member*> followers;
public:
Member();
Member(const Member &p2);
~Member();
void follow(Member &member);
void unfollow(Member &member);
int numFollowers();
int numFollowing();
static int count();
bool operator==(const Member &other) const;
bool operator!=(const Member &other) const;
};
成员cpp公司
int Member::counter = 0;
Member::Member()
{
counter++;
id = counter;
isCopy = false;
cout << "Constructor ID: " << id << endl;
}
Member::Member(const Member & p2)
{
this->id = p2.id;
isCopy = true;
}
Member::~Member()
{
cout << "Destructor ID: " << this->id << endl;
if (!isCopy)
{
counter--;
}
}
void Member::follow(Member &member)
{
if (find(following.begin(), following.end(), &member) == following.end())
{
following.push_back(&member);
member.followers.push_back(this);
}
}
void Member::unfollow(Member &member)
{
following.remove(&member);
member.followers.remove(this);
}
int Member::numFollowers()
{
return followers.size();
}
int Member::numFollowing()
{
return following.size();
}
int Member::count()
{
return counter;
}
bool Member::operator==(const Member & other) const
{
return this->id == other.id;
}
bool Member::operator!=(const Member & other) const
{
return this->id != other.id;
}
下面是一个给我带来一些问题的简单代码:
Member member1, member2;
int main() {
test();
}
void test(){
Member member3;
member2.follow(member3);
member3.follow(member1);
}
测试函数结束后,我可以看到正在调用member3的析构函数,但在主函数中,如果我查看以下member2列表和member1的followers列表(均为Member*),仍然有指向member3地址的指针,并且其中包含一些垃圾值:
{0x00aff720 {isCopy=true (204) id=-858993460 following={ size=3302196 } ...}}
我的目标是,当member3的作用域结束时,以下member2列表的大小和member1的followers列表的大小将为0。
有没有办法解决这个问题?
谢谢大家!