C++で演算子new
とdelete
を使用するのは楽しいですが、後でプログラムのコードでdelete
を呼び出すときに問題が発生することがよくあります。クラスnewとdelete演算子でメモリリークを処理するC++
たとえば、次のコードで:
class Foo {
public:
string *ace;
Foo();
~Foo();
};
Foo::Foo() {
ace = new string;
}
Foo::~Foo() {
delete ace;
}
void UI::ButtonPressed() { //Happens when an event is triggered
Foo *foo = new Foo;
ui->label = ace; //Set some text on the GUI
delete foo; //Calls the destructor, deleting "ace" and removing it from the GUI window
}
Iはnew
文字列を宣言することができるが、私はそれをdelete
場合、その文字列が現在削除されているので、それはGUIフォームから値を除去します。
私は後で何とかこの割り当てられた文字列を削除するための方法はありますか?
私は、プログラムのソースコードの最後の行に、それをグローバル変数として宣言してからdelete
する必要はありません。私はちょうどdelete
と呼ぶことはできませんでしたが、私が教えていることから、それは悪いことであり、メモリリークを引き起こします。
'std :: string'は異なる場合がありますので、 std :: string ace; 'スマートポインタなどについてもっと学ぶべきでしょう。http://en.wikipedia.org/wiki/Smart_pointer –
スマートポインタが非標準のC++データ型で動作するかどうかを知りますか? 'QString'(QT)など? – user99545
Qtにはある種のスマートポインタもありますし、 'std :: smart_ptr'などです。 Qtで動作するはずです... –