Конструктор копирования
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 в конструкторе копирования?
Цитата: grifon_nn
Нужно ли делать проверку cr_p == NULL в конструкторе копирования?
Нет, не нужно.
Другое дело, что ссылаться может на невалидные данные, но это уже отдельная тема и проверить это в общем случае не возможно.
есть функция Func1, которая в качестве параметра получает указатель на Search. Eказатель может быть и нулевым. Или именно здесь и нужно сделать проверку этого указателя на ноль и если это так, то прервать выполнение функции?
OtherClass::Func1(Search* p_search)
{
Search newObj(*p_search);
p = Func2( newObj.getObj());
}
В противном случае *p_search будет "невалидным" - как следствие ACCESS VIOLATION (в лучшем случае ;).
В принципе, содержимое ссылки (адрес) можно определить (через оператор &) - ведь в отладчике (в BCB точно) при отображении стека выводтся как раз адрес.
Цитата: el scorpio
В принципе, содержимое ссылки (адрес) можно определить (через оператор &) - ведь в отладчике (в BCB точно) при отображении стека выводтся как раз адрес.
Содерание ссылки - это не адрес. Ссылка - это всего лишь "псевдоним" объекта. Т.о. содержимое ссылки - это тоже самое, что содержимое объекта, а результат применения оператора & к ссылке, равнозначен применению к объекту. Т.е. применив оператор & мы получаем не "содержимое ссылки", а указатель на объект, как если бы применили этот оператор непосредственно к объекту.
А что тогда физически располагается в ячейке памяти, занятой ссылкой? Всё-таки ссылка место своё в стеке занимает, и как раз 32 бита :)
Цитата:
Т.е. применив оператор & мы получаем не "содержимое ссылки", а указатель на объект
В любом случае, мы получаем адрес объекта.
Цитата: el scorpio
Green
А что тогда физически располагается в ячейке памяти, занятой ссылкой? Всё-таки ссылка место своё в стеке занимает, и как раз 32 бита :)
А что тогда физически располагается в ячейке памяти, занятой ссылкой? Всё-таки ссылка место своё в стеке занимает, и как раз 32 бита :)
А это уже не имеет значения.
Цитата: el scorpio
В любом случае, мы получаем адрес объекта.
Не в любом...
Мы получаем результат выполнения оператора & к объекту.
Заметь, не к сылке, а к объекту на который она ссылается.
А что уж мы получим зависит от реализации оператора &.