私は C++ ポインターに問題があります
私は C# と VB.NET のプログラマーですが、最近 C++ に変換したので、どういうわけか C++ の新しい初心者
です 今、私は字幕エディターを書いていて、字幕の 2 つのクラスがありますすべての行へのポインターのリストを含む段落クラス
および親段落へのポインターを含む字幕行クラス (行が変更されたときに親のメソッドを呼び出すため)
サブタイトルの段落クラスで、サブ行へのポインターのリストを削除しても削除されない
ポインターを削除した後にポインターを使用していくつかの関数を呼び出すことでこれをテストしましたが、それらは機能します!
また、Ubuntu で「システム モニター」を使用して、ポインターにスペースを割り当てる前後にアプリケーションが使用するメモリの量を確認しました。メモリを割り当てた後に増加することがわかりましたが、ポインターを削除した後にスペースが解放されません。
そこで、いくつか質問があります
。1- それぞれが相互に参照する 2 つのクラスを作成できますか?
2- 2 つのクラスのいずれかのポインターを参照に置き換えると、同じ問題がまだ存在します
3- それぞれが相互に参照している 2 つのクラスがある場合、この参照を手動で解除するにはどうすればよいですか
共有ポインターまたは弱いポインター クラスを使用できることはわかっていますが、最初は手動で行いたいと考えています。
これは、アプリケーションの問題を示すための 2 つのクラスのサンプルです。
#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;
}
前もって感謝します
ヤセル・ソビー