Re[3]: Контейнеры для Swap-able объектов
От: Аноним  
Дата: 11.12.07 14:36
Оценка:
Здравствуйте, Atminav, Вы писали:

A>Нужно выделять память, не забывать освобождать ее, да еще следить, чтобы указатель не был 0... Кроме того, указатели — это лишний уровень косвенности, лишнии операции при обращении к объекту.

По поводу косвенной адресации не так уж она и долго происходит
Что мешает использовать указатели !=0 и без выделения памяти?

MyType A[N];
MyType* idx[N];
for(int i=0;i<N;i++) idx[i]=A+i;


A>Вообще, не хочется без лишней необходимости пользоваться new/delete. Так что указатели, даже смарт-указатели, я не рассматриваю.

не хочется н вызывай. Организуй выделения элементов страницами. На каждой странице по N элементов сразу выделяется.
enum { PageShift=12, PageLimit=1<<PageShift, PageMask=PageLimit-1 };
int N=mongo();
MyType** pages=makeSomePages(N,PageLimit);
...
vector<MyType*> idx;
for(int i=0;i<N;i++) idx.push_back(pages[i>>12]+(i&PageMask));

Если хочется можеш им и конструкторы вызывать переопределив void* operator new(void* where,size_t size);

А в сбалансированном дереве хранить указатели или номера элементов и работать уже с ними. Указатель всего одно машинное слово по сравнению со структурой которая может занимать килобайты.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.