Я просто хотел иметь свежую пару глаз, что приведенный ниже код верен в этом:
Указатели, содержащиеся в объекте trifoo (хранящемся в ptr_vector), являются общими указателями f, g, h.
Кроме того, каков результат копирования shared_ptr в конструкторе trifoo; это правильный метод «совместного использования» 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
всегда будет иметь только один элемент, вы, вероятно, хотели, чтобы это было исключено из цикла. - person GManNickG   schedule 30.01.2011