Поиск:

Ответ в темуСоздание новой темы Создание опроса
> templat на templat-е templat-ом погоняет 
:(
    Опции темы
Ivan.
Дата 15.11.2006, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 2.11.2004

Репутация: нет
Всего: 2



пример:
Код

template <class T> class TBase : public TObject {
public:
    T t;
};
//---------------------------------------------------------------------------
template <class T> class T1 : public TBase<T> {
public:
__fastcall ~T1() {}    // Error
};
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    T1<int> *t = new T1<int>;
}
//---------------------------------------------------------------------------

[C++ Error] E2080 '__fastcall T1<int>::~T1()' must be declared with one parameter
Если class TBase рождать от какого нибуть не VCL тоже с виртуальным диструктором, все нормально.
Если class T1 родить с конкретным типом, например int, а не с шаблонным типом T, тоже все нормально.
Подскажите в чем прикол?


--------------------
Я могу ВСЁ, вопрос - сколько времени у меня это займет!
PM MAIL ICQ   Вверх
Vyacheslav
Дата 15.11.2006, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Ну поскольку TObject не совсем С++ класс и его поведение производных от него классов отличается (отличия задокументированы) от обычных классов, то подобное поведение не удивительно. Баг, по всей видимости. 


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Ivan.
Дата 15.11.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 2.11.2004

Репутация: нет
Всего: 2



ну а что мне делать, у меня в классе T1 выделяется память - мне ее надо осаободить.
Теоретически во время работы программы удалений объектов происходит мало, а при завершении программы вся память отмирпет, может да и хрен с ним?


--------------------
Я могу ВСЁ, вопрос - сколько времени у меня это займет!
PM MAIL ICQ   Вверх
Vyacheslav
Дата 16.11.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



А  если использовать auto_ptr?
И использование TObject в качестве базового класса обязательно? 


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Ivan.
Дата 16.11.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 2.11.2004

Репутация: нет
Всего: 2



Вообще это шаблонный класс TXObjectList от TObjectList:
Код

template <class T> class TXObjectList : public TObjectList {
protected:
    T *Get(int Index);
    void Set(int Index, T *Item);
public:
    __property T *Items[int Index] = { read = Get, write = Set };
};
//---------------------------------------------------------------------------
template <class T> void TXObjectList<T>::Set(int Index, T *Item){
    TObjectList::Items[Index] = Item;
}
//---------------------------------------------------------------------------
template <class T> T *TXObjectList<T>::Get(int Index){
    return (T *)TObjectList::Items[Index];
}
//---------------------------------------------------------------------------

от него рождается класс TXPropList:
Код

template <class T> class TXPropList : public TXObjectList<T> {
public:
    TStrings *Names;
    __fastcall TXPropList();
    T *AddString(AnsiString Name);
};
//---------------------------------------------------------------------------
template <class T> __fastcall TXPropList<T>::TXPropList(){
    Names = new TStringList; // Выделяю память
}
//---------------------------------------------------------------------------

Далее есть какието классы TProp:
Код

class TProp1 : public TObject {
public:
    AnsiString Name;
};
//---------------------------------------------------------------------------

Ну и соответственно сама инициализация:
Код

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    TXPropList<TProp1> *TProp1List = new TXPropList<TProp1>;
}
//---------------------------------------------------------------------------

Клсаа TObjectList естественно происходит от TObject


--------------------
Я могу ВСЁ, вопрос - сколько времени у меня это займет!
PM MAIL ICQ   Вверх
Vyacheslav
Дата 16.11.2006, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Как насчет такого?
Код

template <class T> class TXPropList : public TXObjectList<T> {
public:
    std::auto_ptr<TStrings>  Names;
    __fastcall TXPropList();
    T *AddString(AnsiString Name);
};
//---------------------------------------------------------------------------
template <class T> __fastcall TXPropList<T>::TXPropList() : Names(new TStringList){
  






--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Ivan.
Дата 16.11.2006, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 2.11.2004

Репутация: нет
Всего: 2



и что это будет, при удалении объекта Names удалится автоматически?



--------------------
Я могу ВСЁ, вопрос - сколько времени у меня это займет!
PM MAIL ICQ   Вверх
Vyacheslav
Дата 17.11.2006, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Естественно. 


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.