类实例持有自己的引用 - 自我

时间:2014-03-02 04:18:15

标签: c++

我最近一直在学习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实际上只有一个字符长,并且在构造函数中不需要额外的数据成员。我只是好奇这样做。因此,出于这个问题的目的,“毫无意义”并不算是一个问题。

1 个答案:

答案 0 :(得分:0)

一个问题:它使每个对象的大小超过一个引用的大小。编译器无法优化成员。

我猜你实际上可以使用像

这样的宏
#define SELF (*this)

获得相同的效果,无需支付大小费用。