スマート ポインターに関するいくつかのガイドを読みましたが、そのコツは理解できたと思います (しゃれた意図はありません) が、それでも気になることがあります。
スマート ポインターは、new を使用してヒープ上に割り当てられたデータへのポインターを操作することを目的としています。スマート ポインターがスコープ外になると、デストラクタはポインターが指す情報の割り当てを解除します。しかし、私がミスを犯し、スマート ポインターがヒープではなくスタックに割り当てられたオブジェクトを指すようにしたとします。この場合、スタック オブジェクトで削除を使用しようとするため、厄介なセグメンテーション違反エラーが発生します。
問題を説明するために、2 つのコード スニペットを次に示します。このデモンストレーションでは、この実装をスマート ポインターに使用しました。まずはスマートポインターの正しい使い方
int main(void)
{
int my_num = 17;
int *p = new int(my_num);
MyAuto_Ptr<int> p2(p);
return 0;
}
これはバグのあるバージョンで、スタック オブジェクトへのポインターがあり、セグメンテーション フォールトが発生します。
int main(void)
{
int my_num = 17;
int *p = &my_num;
MyAuto_Ptr<int> p2(p);
return 0;
}
スマート ポインターがスタック オブジェクトを指している場合にユーザーに警告する方法はありますか?