Здравствуйте, Rothmans, Вы писали:
R>Если MyAbstractClass абстрактный, то такое не прокатит:
R>vector<MyAbstractClass> MyInstanceList;
R>Почему не прокатит, мне понятно. R>Вопрос: что делать? если хочется иметь список экзямплеров, у которых есть общий абстрактный интерфейс?
vector<MyAbstractClass*> или vector<boost::shared_ptr<MyAbstractClass> >
Re: Абстрактный класс в качестве параметра STL контейнеру
On Wed, 22 Feb 2006 18:29:38 +0200, Rothmans <46644@users.rsdn.ru> wrote:
> Если MyAbstractClass абстрактный, то такое не прокатит: > > vector<MyAbstractClass> MyInstanceList; > > Почему не прокатит, мне понятно. > Вопрос: что делать? если хочется иметь список экзямплеров, у которых есть общий абстрактный интерфейс? > > > P.S: Поиском искал, но что-то не получается.
а такой вариант не подойдет:
vector<MyAbstractClass*> MyInstanceList;
?
--
Andriy Ohorodnyk
Posted via RSDN NNTP Server 2.0
make it simple as possible, but not simpler
Re: Абстрактный класс в качестве параметра STL контейнеру
Здравствуйте, Rothmans, Вы писали:
R>Если MyAbstractClass абстрактный, то такое не прокатит:
R>vector<MyAbstractClass> MyInstanceList;
R>Почему не прокатит, мне понятно. R>Вопрос: что делать? если хочется иметь список экзямплеров, у которых есть общий абстрактный интерфейс?
R>P.S: Поиском искал, но что-то не получается.
Можно завести список указателей.
vector <MyAbstractClass*> MyInstanceList;
и потом
MyInstanceList. push_back (new MyAbstractClassImp);
Re: Абстрактный класс в качестве параметра STL контейнеру
Здравствуйте, Rothmans, Вы писали:
R>Если MyAbstractClass абстрактный, то такое не прокатит:
R>vector<MyAbstractClass> MyInstanceList;
R>Почему не прокатит, мне понятно. R>Вопрос: что делать? если хочется иметь список экзямплеров, у которых есть общий абстрактный интерфейс?
R>P.S: Поиском искал, но что-то не получается.
Используйте boost::shared_ptr<MyAbstractClass>
Re[2]: Абстрактный класс в качестве параметра STL контейнеру
Здравствуйте, andrij, Вы писали:
A>а такой вариант не подойдет: A> vector<MyAbstractClass*> MyInstanceList; A>?
Э... да нежелательно, это ж потом освобождай память из-под динамически созданных экземпляров, а так все копируется и заботиться о памяти ненужно, или нет?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Абстрактный класс в качестве параметра STL контейнеру
Здравствуйте, Rothmans, Вы писали:
R>Здравствуйте, andrij, Вы писали:
A>>а такой вариант не подойдет: A>> vector<MyAbstractClass*> MyInstanceList; A>>?
R>Э... да нежелательно, это ж потом освобождай память из-под динамически созданных экземпляров, а так все копируется и заботиться о памяти ненужно, или нет?
В векторе объекты лежат подряд, это раз.
Как засунуть в такой вектор MyDerviedClass ?
Re[3]: Абстрактный класс в качестве параметра STL контейнеру
Здравствуйте, Rothmans, Вы писали:
R>Здравствуйте, andrij, Вы писали:
A>>а такой вариант не подойдет: A>> vector<MyAbstractClass*> MyInstanceList; A>>?
R>Э... да нежелательно, это ж потом освобождай память из-под динамически созданных экземпляров, а так все копируется и заботиться о памяти ненужно, или нет?
Если в векторе хранить значения, то при вставке произойдёт "срезка" и полиморфизма не будет.
Re[4]: Абстрактный класс в качестве параметра STL контейнеру
Здравствуйте, korzhik, Вы писали:
K>Здравствуйте, Rothmans, Вы писали:
R>>Здравствуйте, andrij, Вы писали:
A>>>а такой вариант не подойдет: A>>> vector<MyAbstractClass*> MyInstanceList; A>>>?
R>>Э... да нежелательно, это ж потом освобождай память из-под динамически созданных экземпляров, а так все копируется и заботиться о памяти ненужно, или нет?
K>Если в векторе хранить значения, то при вставке произойдёт "срезка" и полиморфизма не будет.
Да.. об этом я не подумал.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Абстрактный класс в качестве параметра STL контейнеру
От:
Аноним
Дата:
22.02.06 16:46
Оценка:
Здравствуйте, Rothmans, Вы писали:
R>Если MyAbstractClass абстрактный, то такое не прокатит:
R>vector<MyAbstractClass> MyInstanceList;
R>Почему не прокатит, мне понятно. R>Вопрос: что делать? если хочется иметь список экзямплеров, у которых есть общий абстрактный интерфейс?
В С++ только с помощью указателей на эти самые экземпляры.
Re[4]: Абстрактный класс в качестве параметра STL контейнеру
Здравствуйте, VoidEx, Вы писали:
VE>Здравствуйте, Rothmans, Вы писали:
R>>Здравствуйте, andrij, Вы писали:
A>>>а такой вариант не подойдет: A>>> vector<MyAbstractClass*> MyInstanceList; A>>>? R>>Э... да нежелательно, это ж потом освобождай память из-под динамически созданных экземпляров, а так все копируется и заботиться о памяти ненужно, или нет? VE>В векторе объекты лежат подряд, это раз. VE>Как засунуть в такой вектор MyDerviedClass ?
Если там лежат указатели, то все номально. А MyDerviedClass* r MyAbstractClas* приведется. Главное "голые" указатели туда не сувать. Только "умные уазатели". Почему — объяснили выше.
Re[2]: Абстрактный класс в качестве параметра STL контейнеру
Здравствуйте, Rothmans, Вы писали:
R>Здравствуйте, Axeman, Вы писали:
A>>Используйте boost::shared_ptr<MyAbstractClass> R>Да не хотелось бы доп.библиотеки использовать.
Вариантов немного.
1. Писать свой умный указатель
2. Использовать boost
3. Использовать другие библиотеки
Re[5]: Абстрактный класс в качестве параметра STL контейнеру
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, VoidEx, Вы писали:
VE>>Здравствуйте, Rothmans, Вы писали:
R>>>Здравствуйте, andrij, Вы писали:
A>>>>а такой вариант не подойдет: A>>>> vector<MyAbstractClass*> MyInstanceList; A>>>>? R>>>Э... да нежелательно, это ж потом освобождай память из-под динамически созданных экземпляров, а так все копируется и заботиться о памяти ненужно, или нет? VE>>В векторе объекты лежат подряд, это раз. VE>>Как засунуть в такой вектор MyDerviedClass ? LM>Если там лежат указатели, то все номально. А MyDerviedClass* r MyAbstractClas* приведется. Главное "голые" указатели туда не сувать. Только "умные уазатели". Почему — объяснили выше.
Точно! смарт-поинтерами-то я и воспользуюсь!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Абстрактный класс в качестве параметра STL контейнеру
Здравствуйте, Rothmans, Вы писали:
<skipped> LM>>Если там лежат указатели, то все номально. А MyDerviedClass* r MyAbstractClas* приведется. Главное "голые" указатели туда не сувать. Только "умные уазатели". Почему — объяснили выше. R>Точно! смарт-поинтерами-то я и воспользуюсь!
В boost::shared_ptr это кто? Вы не хотите использовать внешние библиотеки, а в "стандартном" С++ естб только один умный указатель std::auto_ptr. Его сувать в контейнер нельзя.
P.S. Не считайте, что boost — крайне редкий зверь. Он очень полезный. www.boost.org
Re[7]: Абстрактный класс в качестве параметра STL контейнеру
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, Rothmans, Вы писали: LM><skipped> LM>>>Если там лежат указатели, то все номально. А MyDerviedClass* r MyAbstractClas* приведется. Главное "голые" указатели туда не сувать. Только "умные уазатели". Почему — объяснили выше. R>>Точно! смарт-поинтерами-то я и воспользуюсь! LM>В boost::shared_ptr это кто? Вы не хотите использовать внешние библиотеки, а в "стандартном" С++ естб только один умный указатель std::auto_ptr. Его сувать в контейнер нельзя.
LM>P.S. Не считайте, что boost — крайне редкий зверь. Он очень полезный. www.boost.org
Над использованием boost я напряженно размышляю, оглядываясь на начальство.
А можно поподробнее для чайника почему не подойдет auto_ptr?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Абстрактный класс в качестве параметра STL контейнеру
Здравствуйте, Rothmans, Вы писали:
R>Здравствуйте, LuciferMoscow, Вы писали:
LM>>Здравствуйте, Rothmans, Вы писали:
LM>>Вариантов немного. LM>>1. Писать свой умный указатель
R>auto_ptr подойдет? здесь
Rothmans wrote:
> Над использованием boost я напряженно размышляю, оглядываясь на начальство.
А надо!
> А можно поподробнее для чайника почему не подойдет auto_ptr?
Это не умный указатель, а автоматический, что видно из названия.
Только один auto_ptr владеет объектом. При вставке в контейнер становится непонятно кто должен владеть.
Он имеет копирующий конструктор от некостантного аргумента, т.е. правая часть разрушается.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай