【发布时间】:2016-04-03 09:02:19
【问题描述】:
我想在这里实现'GetParent()'函数-
class ChildClass;
class ParentClass
{
public:
....
ChildClass childObj;
....
};
class ChildClass
{
friend class ParentClass;
private:
ChildClass();
public:
ParentClass* GetParent();
};
我试图创建一个私有成员变量来存储指向父对象的指针。 但是这种方法需要额外的内存。
class ChildClass
{
friend class ParentClass;
private:
ChildClass();
ParentClass* m_parent;
public:
ParentClass* GetParent()
{
return m_parent;
}
};
所以我使用了 offsetof() 宏(调用 offsetof() 的性能成本可以忽略),但我不确定这种方法是否安全。它适用于所有情况吗?有没有更好的idea?
class ChildClass
{
public:
ParentClass* GetParent()
{
return reinterpret_cast<ParentClass*>(
reinterpret_cast<int8_t*>(this) - offsetof(ParentClass, childObj)
);
}
};
【问题讨论】:
-
你真正想要达到什么目标?
-
你不能有一个不完整类型的成员变量
ChildClass。换句话说,你有一个循环依赖。 -
另外,你为什么担心指针浪费内存?您打算拥有多少个
ChildClass实例?为什么你的构造函数是private?请更具体,否则我们无法为您提供帮助。你的问题有点不清楚,这就是为什么投反对票的原因(不是我,我认为这个问题可能有一些潜力) -
阅读
offsetof可以使用的类型的限制。你不能在这里使用它。 -
RAM 很便宜。 RAM 价格处于历史低位。
标签: c++ pointers member offsetof