我可以在类定义中实例化当前类的新对象吗?

时间:2018-10-05 09:49:48

标签: c++ class oop

#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,同时删除由{表示的旧对象{1}}?

3 个答案:

答案 0 :(得分:2)

您无法分配给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;

};

答案 1 :(得分:0)

不,您不能。由于this是右值指针,因此无法分配。

cppreference

  

关键字this是一个prvalue表达式,其值是对象的地址

答案 2 :(得分:0)

这不是有效的C ++代码,但是我认为有一种简单的方法可以实现您想要的:

#include <iostream>

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

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

};