私は引数としてポインタを必要とする関数をビルドしているので、ポインタの引数を削除することに関するいくつかのスタックオーバーフローの回答を読んでいました。特にこれらのもの(1、2)です。関数に渡されたポインタを引数として削除する必要がありますか?
機能の簡易版は、以下ではありません:
void draw(Shape * b)
{
//Draws code....
}
ませ削除何私がここで混乱しています。たとえば、関数が次のように呼び出された場合:
Shape * c;
draw(&c);
次に、何も削除する必要はありません。しかし、それはこのような場合:
draw(new Shape{});
私はする必要があります。だから基本的には、私の質問は、どのように削除する場合は、new
キーワードがパラメータで使用されているかどうかです。関数に投げられる可能性のある例外はないので、RAIIの必要はありません。何か案は?それは私がすでにやっていることなので、スマートポインタを含む何も提案しないでください。この質問は好奇心です。また、関数が新しい演算子または既存のポインタの両方を取ることができるということを知っていれば、基本的に両方を区別する方法が必要です。また、私のリンクの場合:これらの質問のほとんどはスマートなポインタ、または1つのコールまたは他のものに依存しているため、これらの質問には本当に答えません。
誰もが答える:あなたはそのコードが正しい例であることを理解していますか?これは実際のコードではありませんが、同じ答えを生成する(よく考えた)例です。それはコードではなく、実際には削除です。 –
私は答えが例にかかわらず立っていると思います。一般に、生のポインタからオブジェクトの存続期間を伝える方法はありません。 – TartanLlama