类实例持有对自身的引用 - self

Class Instances holding a reference to themselves - self

本文关键字:引用 self 实例      更新时间:2023-10-16

我最近一直在学习C++,我一直在尝试坚持使用this->显式引用成员函数和成员变量的风格。

但是,我有一个想法,并开发了一个小类来测试它:

class foo {
public:
    foo();
    size_t get_val() const;
    void set_val(const size_t p);
private:
    foo& self;
    size_t val;
};
foo::foo() : self(*this), val(0) {}
size_t foo::get_val() const { return self.val; }
void foo::set_val(const size_t p) { self.val = p; }

您可以在其中使用 self.bar 而不是 this->bar。

编译得很好,我创建了一些实例并稍微玩了一下,它似乎工作正常(至少据我所知),但我只是想知道,对于非平凡的类,这种定义是否会导致问题。

作为旁注,我确实意识到没有真正的理由这样做。 this->bar 实际上只长一个字符,并且不需要构造函数中的其他数据成员。我只是对这样做感到好奇。因此,就此问题而言,"毫无意义"并不真正算作问题。

一个问题:它使每个对象都变大了一个引用的大小。编译器无法优化不存在的成员。

我想你实际上可以使用这样的宏

#define SELF (*this)

以获得相同的效果,而无需支付尺寸成本。