У меня есть функция внутри класса (A), которая по существу принимает в качестве параметра указатель на другой класс (B).Класс B наследуется несколькими другими классами, которые он также должен принимать.
Что я хотел бы сделать, это взять на себя владение этим указателем для хранения для дальнейшего использования в классе, он не будет использоваться внеснова класс для всего остального.Хотя я бы сделал параметр shared_ptr, я бы хотел избежать этого, насколько это возможно, из-за других людей, с которыми я работаю, которые не совсем понимают, что такое умный указатель.Есть какой-либо способ сделать это?
Вот пример, который я хотел бы сделать, хотя из того, что я тестировал, это не работает.
//In .h file
std::vector< unique_ptr< B > > data_store;
//In .cpp file
void A::add_data(B* NewItem)
{
data_store.resize(data_store.size()+1);
data_store[data_store.size()-1] = NewItem;
}
Во-вторых, я хотел бы, возможно, использоватьконструктор копирования или что-то подобное, чтобы использовать умный указатель внутри класса: с тем, что мне нужно сделать, это может стать немного уродливым, если мне придется выполнять ручное удаление.Проблема в том, что я не знаю, входит ли это базовый класс (B) или это класс, унаследованный от B. Я не слишком уверен, как с этим справиться, не прибегая к жесткому коду в некоторыхвид проверяемого идентификатора для класса и использование правильных конструкторов копирования / перемещения, которых я хотел бы избежать любой ценой.
Я использую обновленный Clang и libC ++ от llvm, которые я обновил около 10:00 по британскому времени12 марта 2012 года.