继承一个C结构并将对象指针传递给c函数 - 它是安全的吗?

时间:2013-12-09 07:47:27

标签: c++ class inheritance

据我所知,C ++没有自己的时间计算类,所以我们可以使用C库的功能。

所以,我决定创建一个C ++包装器类,它使用struct timespec和调用函数,它们与struct timespec一起使用。由于结构和类在C ++中几乎相同,因此类可以继承结构。所以,我可以像这样继承struct timespec:

class Time: timespec {
  public:
    Time();
    Time(int mseconds);

    Time operator+(Time& t1);
    friend std::ostream& operator<<(std::ostream& os, const Time &t);
};

现在的问题是: 在C中,我们这样做是为了获得当前的单调时间:

struct timespec ts;
clock_gettime(CLOCK_MONOTONIC,&ts);

在我的C ++类中,我希望构造函数使用当前时间初始化类。

Time::Time()
{
    clock_gettime(CLOCK_MONOTONIC,this);
}

使用像struct timespec指针这样的指针。

编译好,但是......

这样安全吗?是否有保证,它应该有效?

继承类时,指向派生类的指针与指向基类的指针兼容。但是这个指针是否与指向C struct的指针兼容,传递给C函数?

1 个答案:

答案 0 :(得分:3)

从构造函数传递this的特定示例是安全的,因为clock_gettime的形式参数类型是const struct timespec *(它转换指针,调整任何可能的偏移量)。

该标准对从构造函数传递this施加了一些限制。基本上它涉及在构造完成之前回调对象。但你不是那样做的。

但是,为什么不使用数据成员而不是继承呢?而不是担心它?


顺便说一下,请注意,从C ++ 11开始,C ++现在具有<chrono>标题,具有更高级别的时间效用。