首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承C结构并将对象指针传递给C函数-这是安全的吗?

问继承C结构并将对象指针传递给C函数-这是安全的吗?
EN

Stack Overflow用户
提问于 2013-12-09 15:47:27
回答 1查看 506关注 0票数 3

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

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

代码语言:javascript
复制
class Time: timespec {
  public:
    Time();
    Time(int mseconds);

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

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

代码语言:javascript
复制
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC,&ts);

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

代码语言:javascript
复制
Time::Time()
{
    clock_gettime(CLOCK_MONOTONIC,this);
}

使用this指针,就像struct timespec指针。

它编译正常,但是...

这个安全吗?它能保证,它应该工作吗?

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

EN

回答 1

Stack Overflow用户

发布于 2013-12-09 16:06:36

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

该标准对从构造函数传递this设置了一些限制。从本质上讲,它涉及到在构造完成之前对对象的回调。但你不能这么做。

但是,与其担心这个问题,为什么不直接使用数据成员而不是继承呢?

顺便说一句,请注意,与C++11一样,C++现在具有<chrono>标头,具有更高级别的时间实用程序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20465583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档