Абстрактный класс в качестве параметра STL контейнеру
От: Rothmans  
Дата: 22.02.06 16:29
Оценка:
Если MyAbstractClass абстрактный, то такое не прокатит:

vector<MyAbstractClass> MyInstanceList;

Почему не прокатит, мне понятно.
Вопрос: что делать? если хочется иметь список экзямплеров, у которых есть общий абстрактный интерфейс?


P.S: Поиском искал, но что-то не получается.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Абстрактный класс в качестве параметра STL контейнеру
От: HiSH Россия http://m0riarty.ya.ru
Дата: 22.02.06 16:31
Оценка: 4 (2)
Здравствуйте, Rothmans, Вы писали:

R>Если MyAbstractClass абстрактный, то такое не прокатит:


R>vector<MyAbstractClass> MyInstanceList;


R>Почему не прокатит, мне понятно.

R>Вопрос: что делать? если хочется иметь список экзямплеров, у которых есть общий абстрактный интерфейс?


vector<MyAbstractClass*> или vector<boost::shared_ptr<MyAbstractClass> >
Re: Абстрактный класс в качестве параметра STL контейнеру
От: andrij Украина  
Дата: 22.02.06 16:31
Оценка:
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 контейнеру
От: McQwerty Россия  
Дата: 22.02.06 16:32
Оценка: -1
Здравствуйте, Rothmans, Вы писали:

R>Если MyAbstractClass абстрактный, то такое не прокатит:


R>vector<MyAbstractClass> MyInstanceList;


R>Почему не прокатит, мне понятно.

R>Вопрос: что делать? если хочется иметь список экзямплеров, у которых есть общий абстрактный интерфейс?

R>P.S: Поиском искал, но что-то не получается.


Можно завести список указателей.
vector <MyAbstractClass*> MyInstanceList;

и потом
MyInstanceList. push_back (new MyAbstractClassImp);
Re: Абстрактный класс в качестве параметра STL контейнеру
От: Axeman  
Дата: 22.02.06 16:33
Оценка:
Здравствуйте, Rothmans, Вы писали:

R>Если MyAbstractClass абстрактный, то такое не прокатит:


R>vector<MyAbstractClass> MyInstanceList;


R>Почему не прокатит, мне понятно.

R>Вопрос: что делать? если хочется иметь список экзямплеров, у которых есть общий абстрактный интерфейс?


R>P.S: Поиском искал, но что-то не получается.


Используйте boost::shared_ptr<MyAbstractClass>
Re[2]: Абстрактный класс в качестве параметра STL контейнеру
От: Rothmans  
Дата: 22.02.06 16:36
Оценка:
Здравствуйте, andrij, Вы писали:

A>а такой вариант не подойдет:

A> vector<MyAbstractClass*> MyInstanceList;
A>?

Э... да нежелательно, это ж потом освобождай память из-под динамически созданных экземпляров, а так все копируется и заботиться о памяти ненужно, или нет?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Абстрактный класс в качестве параметра STL контейнеру
От: korzhik Россия  
Дата: 22.02.06 16:36
Оценка: +1
Здравствуйте, McQwerty, Вы писали:

MQ>
MyInstanceList. push_back (new MyAbstractClassImp);


тут надо заметить, что если push_back кинет исключение, то объект созданный с помощью new MyAbstractClassImp утечёт.
Re[3]: Абстрактный класс в качестве параметра STL контейнеру
От: VoidEx  
Дата: 22.02.06 16:38
Оценка:
Здравствуйте, Rothmans, Вы писали:

R>Здравствуйте, andrij, Вы писали:


A>>а такой вариант не подойдет:

A>> vector<MyAbstractClass*> MyInstanceList;
A>>?

R>Э... да нежелательно, это ж потом освобождай память из-под динамически созданных экземпляров, а так все копируется и заботиться о памяти ненужно, или нет?

В векторе объекты лежат подряд, это раз.
Как засунуть в такой вектор MyDerviedClass ?
Re[3]: Абстрактный класс в качестве параметра STL контейнеру
От: korzhik Россия  
Дата: 22.02.06 16:40
Оценка:
Здравствуйте, Rothmans, Вы писали:

R>Здравствуйте, andrij, Вы писали:


A>>а такой вариант не подойдет:

A>> vector<MyAbstractClass*> MyInstanceList;
A>>?

R>Э... да нежелательно, это ж потом освобождай память из-под динамически созданных экземпляров, а так все копируется и заботиться о памяти ненужно, или нет?


Если в векторе хранить значения, то при вставке произойдёт "срезка" и полиморфизма не будет.
Re[4]: Абстрактный класс в качестве параметра STL контейнеру
От: Rothmans  
Дата: 22.02.06 16:43
Оценка:
Здравствуйте, 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 контейнеру
От: LuciferMoscow Россия  
Дата: 22.02.06 16:46
Оценка: 6 (1)
Здравствуйте, VoidEx, Вы писали:

VE>Здравствуйте, Rothmans, Вы писали:


R>>Здравствуйте, andrij, Вы писали:


A>>>а такой вариант не подойдет:

A>>> vector<MyAbstractClass*> MyInstanceList;
A>>>?
R>>Э... да нежелательно, это ж потом освобождай память из-под динамически созданных экземпляров, а так все копируется и заботиться о памяти ненужно, или нет?
VE>В векторе объекты лежат подряд, это раз.
VE>Как засунуть в такой вектор MyDerviedClass ?
Если там лежат указатели, то все номально. А MyDerviedClass* r MyAbstractClas* приведется. Главное "голые" указатели туда не сувать. Только "умные уазатели". Почему — объяснили выше.
Re[2]: Абстрактный класс в качестве параметра STL контейнеру
От: Rothmans  
Дата: 22.02.06 16:47
Оценка:
Здравствуйте, Axeman, Вы писали:

A>Используйте boost::shared_ptr<MyAbstractClass>


Да не хотелось бы доп.библиотеки использовать.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Абстрактный класс в качестве параметра STL контейнеру
От: LuciferMoscow Россия  
Дата: 22.02.06 16:50
Оценка:
Здравствуйте, Rothmans, Вы писали:

R>Здравствуйте, Axeman, Вы писали:


A>>Используйте boost::shared_ptr<MyAbstractClass>

R>Да не хотелось бы доп.библиотеки использовать.
Вариантов немного.
1. Писать свой умный указатель
2. Использовать boost
3. Использовать другие библиотеки
Re[5]: Абстрактный класс в качестве параметра STL контейнеру
От: Rothmans  
Дата: 22.02.06 16:52
Оценка:
Здравствуйте, 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  
Дата: 22.02.06 16:53
Оценка: :)
Здравствуйте, LuciferMoscow, Вы писали:

LM>Здравствуйте, Rothmans, Вы писали:


LM>Вариантов немного.

LM>1. Писать свой умный указатель

auto_ptr подойдет?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Абстрактный класс в качестве параметра STL контейнеру
От: LuciferMoscow Россия  
Дата: 22.02.06 16:56
Оценка:
Здравствуйте, Rothmans, Вы писали:
<skipped>
LM>>Если там лежат указатели, то все номально. А MyDerviedClass* r MyAbstractClas* приведется. Главное "голые" указатели туда не сувать. Только "умные уазатели". Почему — объяснили выше.
R>Точно! смарт-поинтерами-то я и воспользуюсь!
В boost::shared_ptr это кто? Вы не хотите использовать внешние библиотеки, а в "стандартном" С++ естб только один умный указатель std::auto_ptr. Его сувать в контейнер нельзя.

P.S. Не считайте, что boost — крайне редкий зверь. Он очень полезный. www.boost.org
Re[7]: Абстрактный класс в качестве параметра STL контейнеру
От: Rothmans  
Дата: 22.02.06 16:59
Оценка:
Здравствуйте, 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 контейнеру
От: HiSH Россия http://m0riarty.ya.ru
Дата: 22.02.06 17:01
Оценка: 1 (1)
Здравствуйте, Rothmans, Вы писали:

R>Здравствуйте, LuciferMoscow, Вы писали:


LM>>Здравствуйте, Rothmans, Вы писали:


LM>>Вариантов немного.

LM>>1. Писать свой умный указатель

R>auto_ptr подойдет?

здесь
Автор: _Winnie
Дата: 26.04.04
Re[8]: Абстрактный класс в качестве параметра STL контейнеру
От: kan_izh Великобритания  
Дата: 22.02.06 17:02
Оценка: 3 (1)
Rothmans wrote:

> Над использованием boost я напряженно размышляю, оглядываясь на начальство.

А надо!

> А можно поподробнее для чайника почему не подойдет auto_ptr?

Это не умный указатель, а автоматический, что видно из названия.
Только один auto_ptr владеет объектом. При вставке в контейнер становится непонятно кто должен владеть.
Он имеет копирующий конструктор от некостантного аргумента, т.е. правая часть разрушается.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.