sizeof(* this)仅在头文件构造函数实现中

时间:2009-11-10 20:44:44

标签: c++

虽然“标准”更倾向于使用sizeof(typename),但是sizeof(*this) 更容易出错或者某种方式不合适?

乍看之下我看不到任何东西,但如果是的话,为什么简短的解释会有所帮助。

3 个答案:

答案 0 :(得分:10)

我能想到避免sizeof(*this)的唯一原因是它可能被误解为实际对象的大小(例如派生类)。

答案 1 :(得分:8)

我希望尽可能sizeof(variable)超过sizeof(type),因为如果您的变量更改类型,它更不容易出错。

答案 2 :(得分:3)

我的观点是sizeof(type)优于sizeof(变量)以排除歧义。以下示例显示通过基类指针引用的派生类的实例。 size方法返回sizeof(Derived),因此sz1 == sz3 == sz4。如果调用者没有对实现的深入了解,那么调用者可以合理地期望sizeof(Base)。

class Base
{
  public:
    virtual size_t size( void )
    {
        return sizeof( *this ) ;
    }
  private:
    int    a ;
    double b ;
} ;

class Derived : public Base
{
  public:
    virtual size_t size( void )
    {
        return sizeof( *this ) ;
    }
  private:
    long c ;
  } ;

int main( int argc , char * argv[] )
{
    Base    b ;
    Derived d ;

    size_t sz0 = sizeof( Base ) ;
    size_t sz1 = sizeof( Derived ) ;
    size_t sz2 = b.size() ;
    size_t sz3 = d.size() ;

    Base * pb = &d ;
    size_t sz4 = pb->size() ;
}