没有数据成员的类的大小返回为 1 个字节,即使声明了隐式“this”指针也是如此。返回的大小不应该是 4 个字节(在 32 位机器上)吗?我看到一些文章指出“this”指针不计入计算对象的大小。但是我无法理解其中的原因。 此外,如果任何成员函数被声明为虚拟的,则类的大小现在返回为 4 个字节。这意味着 vptr 被计算用于计算对象的大小。为什么在计算对象大小时考虑 vptr 而忽略“this”指针?
最佳答案
this
指针不是类的成员。它只是一个构造,用于属于该类的方法中以引用当前实例。
如果你有这样的类:
class IntPair
{
public:
IntPair(int a, int b) : _a(a), _b(b) { }
int sum() const { return _a + _b; }
public:
int _a;
int _b;
};
对于每个实例,此类仅需要两个 int
实例的空间。一旦您创建了一个实例并运行了 sum()
方法,该方法将被调用并带有指向该实例的指针,但该指针总是来自其他地方,它不会存储在对象实例。
例如:
IntPair *fib12 = new IntPair(89, 144);
cout << fib12->sum();
注意成为 this
指针的变量是如何存储在对象外部的,在创建它的范围内。
事实上,您总是可以将上述方法转换为:
static int sum2(const IntPair* instance)
{
return instance->_a + instance->_b;
}
如果上面是在类内部定义的(这样它就可以访问私有(private)成员),则没有区别。事实上,这方法是如何在幕后实现的; this
指针只是所有成员方法的隐藏参数。
调用会变成:
IntPair* fib12 = new IntPair(89, 144);
cout << IntPair::sum2(fib12);
关于c++ - 具有 'this' 指针的类的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2468152/