Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Конструктор копирования

23K
06 декабря 2006 года
grifon_nn
2 / / 06.12.2006
Есть класс

class Search{
private:
int count;
public:
....конструкторы....

Search::Search(const Search& cr_p )
{
ap_searchSpec = SearchTest(cr_p.count);
}

int get_count()
{
return count;
}
};

Нужно ли делать проверку cr_p == NULL в конструкторе копирования?
5.4K
06 декабря 2006 года
Svyatozar
221 / / 11.09.2006
Цитата: grifon_nn
Нужно ли делать проверку cr_p == NULL в конструкторе копирования?


Нет, не нужно.

3
06 декабря 2006 года
Green
4.8K / / 20.01.2000
Ссылка не может быть нулевой, она в отличие от указателя ВСЕГДА на что-нибудь ссылается.
Другое дело, что ссылаться может на невалидные данные, но это уже отдельная тема и проверить это в общем случае не возможно.
23K
06 декабря 2006 года
grifon_nn
2 / / 06.12.2006
А если рассмотреть следующий вариант:
есть функция Func1, которая в качестве параметра получает указатель на Search. Eказатель может быть и нулевым. Или именно здесь и нужно сделать проверку этого указателя на ноль и если это так, то прервать выполнение функции?

OtherClass::Func1(Search* p_search)
{
Search newObj(*p_search);

p = Func2( newObj.getObj());
}
309
07 декабря 2006 года
el scorpio
1.1K / / 19.09.2006
Ситуация возможная, именно по этому требуется использовать проверку указателя. Более того, указатель может быть "неопределённым" - содержать случайный адрес.

В противном случае *p_search будет "невалидным" - как следствие ACCESS VIOLATION (в лучшем случае ;).

В принципе, содержимое ссылки (адрес) можно определить (через оператор &) - ведь в отладчике (в BCB точно) при отображении стека выводтся как раз адрес.
3
07 декабря 2006 года
Green
4.8K / / 20.01.2000
Цитата: el scorpio

В принципе, содержимое ссылки (адрес) можно определить (через оператор &) - ведь в отладчике (в BCB точно) при отображении стека выводтся как раз адрес.


Содерание ссылки - это не адрес. Ссылка - это всего лишь "псевдоним" объекта. Т.о. содержимое ссылки - это тоже самое, что содержимое объекта, а результат применения оператора & к ссылке, равнозначен применению к объекту. Т.е. применив оператор & мы получаем не "содержимое ссылки", а указатель на объект, как если бы применили этот оператор непосредственно к объекту.

309
08 декабря 2006 года
el scorpio
1.1K / / 19.09.2006
Green
А что тогда физически располагается в ячейке памяти, занятой ссылкой? Всё-таки ссылка место своё в стеке занимает, и как раз 32 бита :)

Цитата:
Т.е. применив оператор & мы получаем не "содержимое ссылки", а указатель на объект


В любом случае, мы получаем адрес объекта.

3
08 декабря 2006 года
Green
4.8K / / 20.01.2000
Цитата: el scorpio
Green
А что тогда физически располагается в ячейке памяти, занятой ссылкой? Всё-таки ссылка место своё в стеке занимает, и как раз 32 бита :)


А это уже не имеет значения.

Цитата: el scorpio

В любом случае, мы получаем адрес объекта.


Не в любом...
Мы получаем результат выполнения оператора & к объекту.
Заметь, не к сылке, а к объекту на который она ссылается.
А что уж мы получим зависит от реализации оператора &.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог