Я ищу способ сделать так, чтобы мой конструктор сделал ссылку на другой объект следующим образом:
Foo object1("File1");
Foo object2("File1");
Первый объект создается нормально.Второй объект видит, что уже существует объект, использующий параметр «File1», и сам ссылается на первый объект.Я знаю, что это не может быть напрямую возможно сделать таким образом.Я сохраняю статический вектор Foo * для отслеживания выделенных объектов.
Я знаю, что могу сделать все члены указателей класса и для первого случая создать (New) их.Во втором случае я бы не стал создавать их и указывать на первый объект.Кроме того, второй объект гарантированно имеет более короткий срок службы, чем первый.
Итак, есть ли простой / элегантный способ сделать это?
РЕДАКТИРОВАТЬ: Спасибодля всех отличных решений.Мне нравятся все они, но я могу использовать только один.Я сохраню все эти знания для дальнейшего использования.
Я выбираю решение static map <string, FooObject*>
.Сначала я подумал, что это глупо, но после дальнейшего рассмотрения он показался мне элегантным.
Единственное добавление, которое я вижу сейчас, - это добавление счетчика ссылок в FooObject.Таким образом, в конструкторе Foo я могу увеличить счетчик ссылок.В деструкторе уменьшите счетчик.Если счетчик равен нулю, удалите его с карты.Таким образом, нет утечек памяти, и объекты могут быть уничтожены в любом порядке.Я предполагаю, что эта методология - shared_ptr esque.За это идет @Travis.
Спасибо, Джеймс.