Могу ли я написать конструктор копирования, просто передав указатель вместо ссылки на const? (Было бы хорошо, если я должен быть уверен, что я не собираюсь менять любые значения, хотя?)Копировать конструкторы - C++
Как так:
SampleClass::SampleClass(SampleClass* p)
{
//do the necessary copy functionality
}
вместо:
SampleClass::SampleClass(const SampleClass& copyObj)
{
//do the necessary copy
}
Спасибо заранее.
Спасибо всем. Поэтому, если я пишу конструктор, который принимает указатель (и думал, что это мой конструктор копирования), компилятор по-прежнему будет снабжать конструктором копии по умолчанию, и в этом случае мой конструктор (который, как я думал, был моим конструктором копирования) не будет вызываться и будет вызываться конструктор копии по умолчанию. Понял.
Вы не можете получить нулевую ссылку, не прибегая к непредсказуемому поведению в этом коде. Тестирование для NULL после того, как факт не является полезным, поскольку ошибка находится в другом коде. Фактически, компилятор может оптимизировать тест 'if (& MyClassCopy == NULL)', потому что он никогда не может произойти в правильной программе. –
Я согласен с тем, что разыменование указателя NULL является недопустимой операцией, и тест для NULL лучше всего делать до операции разыменования. Однако, поскольку NULL можно назначить во время выполнения, большинство компиляторов позволят вам создать ссылку NULL, и компилятор не сможет проверить его. или оптимизировать тест для NULL out. Вы можете попробовать его с помощью g ++, и тест работает. – Rob
После момента отражения вы правы, вы ДОЛЖНЫ тестировать нуль перед операцией разыменования. Тест после факта действительно не определен. – Rob