私はsmartpointer-templateを実装しています。スマートポインタを別の関数へのパラメータとして渡すときに参照カウンタを増やすにはどうすればよいですか?リファレンスカウントを増やすためにどの演算子をオーバーロードしますか?例えばスマートポインタをパラメータとして関数に渡す
:
class test
{
test() { }
~test() { }
};
void A()
{
SmartPointer<test> p;
B(p);
}
void B(SmartPointer<test> p)
{
C(p);
}
void C(SmartPointer<test> p)
{
// p ref count is still 1 and will be destroyed at end of C
}
おかげ
** ** ref-count呼び出しを自分で実装する場合は、すべてのコンストラクタ(コピーコンストラクタを含む)とデストラクタでそれを行う必要があります。しかし、あなたはする必要はありません。単に 'boost :: intrusive_ptr'を使ってください。名前にかかわらず、侵入型ポインタを実装する必要はありませんが、それはref-count呼び出しを処理するだけです。乾杯、 –
警告してください。スマートなC++の人でも、正しいスマートポインタの作成には問題があります。スコット・マイヤーズは、彼の講義で頻繁に彼の試みについて語っています(出版の5年後でさえ(出版前に広範囲にレビューされた後でさえ))彼はまだそれについて電子メールを受け取りました。標準のスマートポインタには、間違いがないことを確認するために、それらをチェックするためにそれらを見ている100,000人の人々がいました。 –