Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2011, 19:40   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
Восклицание Инициализация членов-указателей в конструкторе

Вот есть такая сущность:
Код:
class Student
{
    public:
      Student(const char* sName) :
                thisid(++id) , *pName(sName) {}
      Student(const Student& s) :
                thisid(++id) , *pName(s.pName) {}
     // ... 

    private:
      string* pName;
};
Но, однако, такой подход не работает. А мне, как вы понимаете, всего лишь нужно инициализировать pName в списке инициализации. Можно ли так вообще сделать?
_-Re@l-_ вне форума Ответить с цитированием
Старый 11.11.2011, 19:45   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)можете инициализировать в самом конструкторе(а не в списке инита)
2)указатель там в общем то не нужен.
3)раз уж указатель, освобождать кто будет?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.11.2011, 19:59   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
1)можете инициализировать в самом конструкторе(а не в списке инита)
Хочу в списке инита.
Цитата:
2)указатель там в общем то не нужен.
Эээ.. Не понял.
Если вы имеете ввиду, что не надо делать тип string*, то просто поймите, что я так хочу Знаю, что это криво, но сейчас хочу так.
Однако, если имеете ввиду, что не надо делать
Код:
*pName(sName)
а надо
Код:
pName(sName)
то так тоже не работает.
Цитата:
3)раз уж указатель, освобождать кто будет?
Приведён не весь код, в деструкторе память освобождается.

Последний раз редактировалось _-Re@l-_; 11.11.2011 в 20:02.
_-Re@l-_ вне форума Ответить с цитированием
Старый 11.11.2011, 20:13   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну раз уж хотите в списке так в списке и пишите.
Код:
pName(new std::string(sname))
указатель, так указатель.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.11.2011, 20:17   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Во! Спасибо. То, что нужно.
_-Re@l-_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в конструкторе C++ Ver0nica Помощь студентам 1 24.04.2011 13:34
Неявные данные в конструкторе. Lazio Общие вопросы C/C++ 4 12.04.2010 12:53
Конструктор в конструкторе Юра_YUYU Общие вопросы C/C++ 3 30.01.2010 15:32
Инициализация массивов в конструкторе. jojahti Общие вопросы C/C++ 7 27.07.2009 13:30
Инициализация массива указателей. Непонятно !!! Adamant Общие вопросы C/C++ 2 05.11.2007 16:22