【发布时间】:2019-02-28 15:30:12
【问题描述】:
这样的初始化很糟糕吗?
class A
{
public:
~A();
A();
B &b;
};
A::~A()
{
delete &b;
}
A::A() :
b(*(new B()))
{
}
我想要的只是在没有“->”运算符的情况下访问成员“b”。我也不能让 B 类成为 A 类的一部分,因为 B 类在 A 类的标题中不完整。
更新:感谢您的回答!如果您需要更多信息,这里的 B 类代表一个“信号”(回调列表)。在 99% 的情况下,这个类只是其他类的成员(不是指针或引用)。但是一个特定的类(在我的示例中为 A)不能包含 B 类标头。我仍然希望 A 类中的这个信号能够像任何其他信号一样被连接和调用:
object->signal.connect(...);
object->signal();
使用点,而不是“->”。 A 类不能包含 B 类标头,因为有模板类继承了 A 类...
【问题讨论】:
-
为什么要在没有
->的情况下访问它? -
Also I can't make class B to be part of class A because class B is incomplete in A class' header.转发声明吗? -
这种设计介于怪异和危险之间
-
如果您使用this technique,您可以在
A中有一个引用,而不是将其绑定到您动态初始化的内容。 -
@CoryKramer :我目前正在维护一个代码库,它使用这个,呃,“概念”作为其“内存管理技术”之一(当然是 C++11 之前的)。这会导致您不知道是否应该使用
delete的引用。
标签: c++