大部分时间我都可以在堆栈溢出时找到答案。
我正在开展一个项目,我需要一些建议。
A类将拥有数百万个对象/实例。 A类有几个成员,包括B类,C类和D类等。 B,C和D等等有许多成员H,I,J和K等。
A类总是只有一个“有效”类成员,这意味着只使用B或C(或其他)。 但是,B级通常有一个以上的“有效”级成员。
那么在A类声明中使用“B类”或“类* B”会有什么不同?同样,B类声明怎么样?
一些插图代码: 解决方案1
Class A
{
B b;//i assume once A has an object, both b and c will take memory
C c;
}
Class B
{
H h;
I i;
}
或解决方案2
Class A
{
B * b; //only one of B or C may be used buy we don't know so far
C * c;
}
Class B
{
H * h;//a combination of h, i, j, k, etc may be used, we still don't know so far.
I * i;
}
我假设在类声明中使用空指针(解决方案2),我可以在定义和程序运行期间节省大量内存。因为我知道实际上只会使用一个或几个指针。
您怎么看?
答案 0 :(得分:0)
这听起来像是polymorphism的工作。
根据A
可能包含B
或C
这一事实,并且要么不更改A
的界面,似乎B
和C
应该从公共基础BC
继承而A
应该有一个指向该
struct BC
{
virtual int foo() = 0;
};
struct B : BC
{
virtual int foo() override { return 42; }
};
struct C : BC
{
virtual int foo() override { return 420; }
};
struct A
{
BC* bc; // which should likely be...
std::unique_ptr<BC> ubc;
int foo() { return ubc->foo(); }
};
同样适用于H
以后,在B
如果您发现包含类的界面根据其内容发生了显着变化,那么您可能正在构建一个具有漏洞抽象的monolith。考虑重组。