Могу ли я создать новый объект текущего класса в определении класса - PullRequest
0 голосов
/ 05 октября 2018
#include <iostream>

class A
{
 public:
    A(int n = 1) : i(n) {}

    void Transform(int j)
    {
        // I want to create a new object and assign that object to "this"
        A *obj = new A(j);
        delete this;
        this = obj;
    }
private:
    int i;

};

Могу ли я создать новый объект класса A внутри функции Transform() класса A и назначить новый объект this при удалении старого объекта, представленного this?

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Вы не можете присвоить this, но вы все равно можете поменять местами объект, представленный this, с локальным объектом, созданным в A::Transform():

#include <iostream>

class A
{
 public:
    A(int n = 1) : i(n) {}

    void Transform(int j)
    {
        A obj(j); // create a new object A
        std::swap(*this, obj);
    }
private:
    int i;

};
0 голосов
/ 05 октября 2018

Это не правильный код C ++, но я думаю, что есть простой способ достичь того, что вы хотите:

#include <iostream>

class A
{
 public:
    A(int n = 1) : i(n) {}

    void Transform(int j)
    {
        *this = A(j);
    }
private:
    int i;

};
0 голосов
/ 05 октября 2018

Нет, вы не можете.Поскольку this является указателем rvalue, который не может быть назначен.

cppreference

Ключевое слово this является выражением prvalue, значение которого равноадрес объекта

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