【问题标题】:Can I instantiate a new object of current class in the class definition我可以在类定义中实例化当前类的新对象吗
【发布时间】:2018-10-05 09:49:48
【问题描述】:
#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 表示的旧对象吗?

【问题讨论】:

标签: c++ class oop


【解决方案1】:

您不能分配给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;

};

【讨论】:

  • @ネロク 非常感谢!基类中实际上有一个复制构造函数和 = 运算符。这样就解决了问题
【解决方案2】:

不,你不能。因为this是一个右值指针,不能赋值。

cppreference

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

【讨论】:

    【解决方案3】:

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

    #include <iostream>
    
    class A
    {
     public:
        A(int n = 1) : i(n) {}
    
        void Transform(int j)
        {
            *this = A(j);
        }
    private:
        int i;
    
    };
    

    【讨论】:

      猜你喜欢
      • 2010-09-13
      • 2022-06-26
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      相关资源
      最近更新 更多