Я работаю с классом, который в основном работает нормально, но я выполняю некоторые функции, которые могут иметь рекурсивную функцию, возвращают указатель типа класса в качестве элемента управления, и поэтому он может быть назначая NULL
указатель на мой объект класса так долго короткий рассказ:Оператор присваивания C++ Назначение NULL
Thing& Thing::operator=(Thing * _other){
if (_other == NULL){
*this = NULL; // compiler throws here
return *this;
}
// does other assignment work
return *this;
}
мой компилятор VS2010 бросает, что this
не является I-значение. так как мне установить значение NULL
, или даже можно установить элемент в NULL изнутри?
EDIT: модифицировано this
до *this
, хотя по какой-то причине программа прерывается бесконечными вызовами оператора присваивания. не знаю, что происходит
'* this = NULL' снова вызывает ваш оператор, который переходит в if, вызывающий ваш оператор, и т. Д. Если вы хотите написать оператор присваивания копий, он должен принимать аргумент с помощью ссылки const или значения (см. копия и смена идиомы). –
Почему вы не используете конструктор копирования? – Alex
@Alex аналогичный должен был быть сделан в конструкторе копирования. потому что большинство конструкторов копий просто копируют объект arg, и если вы пытаетесь скопировать NULL-данные, большинство отладчиков/exectables сбой или должны. – gardian06