無理かもしれませんが、質問させていただきます...
変数自体のクラスを変更せずに自動変数が削除されたかどうかを追跡する方法はありますか? たとえば、次のコードを検討してください。
const char* pStringBuffer;
{
std::string sString( "foo" );
pStringBuffer = sString.c_str();
}
明らかに、ブロックの後、pStringBuffer はダングリング ポインターであり、有効である場合と有効でない場合があります。私が望むのは、pStringBuffer (const char* のキャスト演算子を含む) を含むラッパー クラスを持つ方法ですが、参照している変数がまだ有効であることを主張します。参照される変数の型を変更することで、確かにそれを行うことができます (たとえば、shared_ptr/weak_ptr をブーストする) が、参照される型に制限を課すことなく実行できるようにしたいと考えています。
いくつかの考え:
- おそらく、代入構文を変更して、参照された変数を含める必要があります (これで問題ありません)。
- ラッパー クラスが参照されたクラスよりも「後で」割り当てられたかどうかを検出するためにスタック ポインターを調べることができるかもしれませんが、これはハッキーで標準的ではないようです (C++ はスタックの動作を定義していません)。しかし、それはうまくいくかもしれません。
考え/素晴らしい解決策はありますか?