Вы можете создать std :: vector, который будет содержать любые указатели на то, что вы передаете ему.Он не будет предпринимать какие-либо попытки удалить те указатели на уничтожение, которые могут быть, а могут и не совпадать с вашими, но он будет содержать именно те значения, которые вы передаете.создайте std :: vector >, в котором будут храниться указатели, которые будут выпущены, когда нет висящих копий shared_ptr.Они также будут содержать «оригинал» foo *, который вы прошли;вы можете получить его снова с помощью метода shared_ptr :: get ().
Единственный раз, когда вы не увидите точно такой же указатель, как у вашего производного объекта, это если вы используете множественное наследование классов, иваши базовые классы включают в себя данные.Потому что в этом случае foo * в конечном итоге будет указывать на часть данных «foo», которая не обязательно должна быть в «корне» объекта.