a を返す関数を考えてみましょう。そのため、その定義でType*
a を割り当てることができるように見えType
ますが、確かなことはわかりません (多くの関数があり、それらの定義を読む時間がありません)。
返されたポインタを削除する必要があるかどうかをどのように判断できますか? たとえば、これは次のタイプです。
struct MyStruct
{
MyStruct(void) { cout << "Created.\n"; }
~MyStruct(void) { cout << "Deleted.\n"; }
};
そして、これは関数です:
MyStruct* Func1(void)
{
return (new MyStruct());
}
Func1 はポインターを割り当てましたが、後でその割り当てを解除する必要があります。delete
しかし、おそらく定義は別のものであり、ポインターはdであってはなりません。
私の質問は、ポインタを削除するかどうかをどのように判断できますか? たとえば、ポインターが静的である可能性がありますか?
MyStruct* Func2(void)
{
static MyStruct* ms = &MyStruct();
return ms;
}
このポインタの割り当てを解除すると、プログラム全体がクラッシュします。
前もって感謝します。