我对 C++ 指针有疑问
我是 C# 和 VB.NET 程序员,但我最近已经转换为 C++,所以我不知何故是 C++ 新手
现在我正在写一个字幕编辑器,我有两个类一个字幕包含指向其所有行的指针列表的段落类
和包含指向其父段落的指针的字幕行类(当行发生更改时调用父级中的方法)
在字幕段落类中,当我删除指向子行的指针列表时,它们不会被删除
我通过在删除指针后尝试使用指针并调用一些函数来测试它,它们可以工作!
我还在 Ubuntu 中使用“系统监视器”来告诉我的应用程序在为指针分配空间之前和之后使用了多少内存,我发现在分配内存后它会增加,但在我删除指针后空间没有被释放
所以我有几个问题:
1-我可以有两个相互引用的类吗?
2-当我用引用替换两个类之一中的指针时,同样的问题仍然存在
3-如果我有两个类,每个类都相互引用,我该如何手动打破这个引用
我知道我可以使用共享指针或弱指针类,但我想先手动完成
这是我的两个类的示例,用于演示我的应用程序中的问题
#include <iostream>
#include <stdio.h>
class B;
class A
{
public :
void setB(B *b){_b = b;cout << "set B" << endl;}
~A();
private:
B *_b;
};
class B
{
public :
void setA(A *a){_a = a;cout << "set A" << endl;}
~B(){cout <<"B is dieing" << endl;/*delete _a;*/}
private:
A *_a;
};
A::~A(){cout << "A is dieing" << endl;delete _b;}
int main()
{
getchar(); // two have some time to know how much memory does my application use before allocaing space for pointers
A *a = new A;
B *b = new B;
a->setB(b);
b->setA(a);
getchar();// two have some time to know how much memory does my application use after deallocaing the space
delete a;
delete b;
// but here,after deleting it, it's still there, not deleted! I can use it
a->setB(b);
getchar();
return 0;
}
提前致谢
亚瑟·索比