【发布时间】:2018-10-30 10:08:33
【问题描述】:
这听起来很简单,但现在我完全糊涂了。在我的头文件中不包含类定义的情况下,如何防止类的实例超出范围?我可以使用某种前向参考吗?我使用 C++ VS2017。我希望下面的伪代码能说明我的意图。
// MyHeader.h
class X
{
class ThirdPartyClass &tpc; // This must require a forward definition
// and many other things
}
// My program
#include "MyHeader.h"
int main ()
{
X x;
foo(x);
}
// A separately compiled module
#include "MyHeader.h"
#include "ThirdPartyClass.hpp" // (Very large)
void foo (class X &x)
{
ThirdPartyClass localtpc;
x.tpc = &localtpc;
}
我知道它不会赢得最佳代码奖。我想要做的是在 foo() 退出后将 localtpc 的实例保留在内存中。 ThirdPartyClass.hpp 很大,我不想在 MyHeader.h 中包含 ThirdPartyClass.hpp。使用 void * 来保存引用不起作用,localtpc 的实例被破坏。 ThirdPartyClass 维护一个引用计数,但它不能被显式操作。 任何见解将不胜感激。 哈士奇
【问题讨论】:
-
然后分配具有动态存储持续时间的
ThirdPartyClass对象。那是auto p_obj{::std::make_unique<ThirdPartyClass>()};并将其移动到tpc(这也应该是一个智能指针) -
您的 X 类有 .cpp 文件吗?如果是这样,您打算如何在不包含类定义的情况下使用
tpc成员,如果您不在 X 类中使用tpc,为什么它根本是该类的成员? -
@VTT 答案进入答案部分好友
-
@r3mus。 X 类必须持有对 TPC 实例的引用。