Могу ли я удалить сам объект и перераспределить его? - PullRequest
0 голосов
/ 07 июля 2019

Могу ли я перераспределить сам объект?

Недавно я изучал конструктор копирования, и мне стало любопытно удалить «this» и перераспределить его.

obj(const obj &s) {
    if(this != NULL)
        delete this;
    this = new obj();
}

И он говорит, что [Ошибка] lvalue требуется в качестве левого операнда присваивания. Разве нельзя перераспределить себя? если так, то почему?

1 Ответ

2 голосов
/ 07 июля 2019

delete оператор работает только для объектов, выделенных с использованием оператора new, в противном случае поведение не определено.

После того, как delete this; сделано, ни один из членов не должен быть доступен.При доступе это вызовет исключение и приведет к сбою.

Но вы не можете назначить указатель this.this - это выражение prvalue , значением которого является адрес объекта, для которого вызывается функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...