私は最近、さまざまなスマート ポインター型について読みましたが、特に unique_ptr は非常に有用であり、shared_ptr と weak_ptr もある程度役立つと思います。ただし、いずれかのポインター型を処理できる「汎用」関数を作成する方法と、それが良いアイデアであるかどうかはわかりません。
スマート ポインターによってカプセル化されたオブジェクトのベクトルがあり、関数を使用してすべての要素に何らかのアクションを適用したいとします。たとえば、次のようになります。
void doSomething(vector<shared_ptr<SomeType>>& array) {
// iterate over all array elements and do something
}
明らかに、この関数を shared/unique/weak_ptr に対して 3 回複製する必要がありますが、これはやや面倒です。関数パラメーターの使用法にすべて適合する「ジェネリック」/「ポリモーフィック」スマートポインタータイプを使用する方が簡単です。
void doSomething(vector<generic_ptr<SomeType>>& array) {
// iterate over all array elements and do something
// no matter if array is a vector<shared_ptr> or vector<unique_ptr>
}
では、そのようなスマートポインターは存在するのでしょうか? はいの場合 - その使用によりどのような問題が発生する可能性がありますか? いいえの場合 - なぜですか?