:ブースト::私は以下のコードは、その中で正しいことを目の新鮮なペアを持っていると思ったshared_ptrのセマンティクス(コピー)
(ptr_vectorに格納されている)オブジェクトtrifooに含まれるポインタが共有されているがポインタf、g、h。
また、trifooのコンストラクタでのshared_ptrのコピーの結果は何ですか。 shared_ptrを共有する正しい方法です。参照カウントが増えていることを確認しています。他のすべての疑問を検証するためにテストできましたが、これを(正しく)確認する方法がわかりません。どんな批判も歓迎です。
#include <boost/ptr_container/ptr_vector.hpp>
#include <boost/shared_ptr.hpp>
class foo {
int a, b;
public:
foo(int A, int B) : a(A), b(B) {}
};
typedef boost::shared_ptr<foo> foo_ptr;
class trifoo {
foo_ptr c, d, e;
public:
trifoo(const foo_ptr& C, const foo_ptr& D, const foo_ptr& E) : c(C), d(D), e(E) {}
};
int main() {
for (int i = 0; i < 5000000; i++) {
foo_ptr f(new foo(1,2));
foo_ptr g(new foo(2,3));
foo_ptr h(new foo(4,5));
boost::ptr_vector<trifoo> tris;
tris.push_back(new trifoo(f, g, h));
}
return 0;
}
注:無意味なループはメモリリークをテストすることでしたが、何も起こりませんでした。
私には正常に見えます。ただし、初期化リストを代入する方が好都合で、 'tris'ベクトルは1つの要素しか持たないでしょう。 – GManNickG
これは単純にptr_vectorの機能をテストするだけでしたが、この実装は実用的なアプリケーションではありません。答えのため – dcousens