关于内存优化的问题C ++

时间:2014-02-06 07:34:53

标签: c++

我有头文件,如下所示。

class A;
class B;
class C;

Class a {
  A *a;
  B *b;
  C *c;
};

现在,Class a未使用所有ABC和其他40个人。我有大约40个前向声明...有可能优化它有人..所以,我可以在需要基础上声明指向类的指针,而不是浪费所有指向所有40个奇数类的指针的内存?

3 个答案:

答案 0 :(得分:2)

您可以使用带类型代码的联合或boost :: variant

答案 1 :(得分:1)

我现在建议您创建一个父类,并将所有A,B,C等作为子项放置......然后在类中使用父类的列表,并将所需的子类放在上面它。但是出现这个问题实际上是由于错误的面向对象设计。例如,用Java学习系统的OO设计原理,然后在C ++中使用它们。

答案 2 :(得分:0)

承认你不能修改你的课程,并且承认你一次只使用一个,你可以使用工会加上一个ID或“动态输入的空白​​”:

unsigned gen_id()
{ static unsigned id=0; ++id; return id; }

template<class T>
unsigned id_of()
{ static id = gen_id(); return id; } 

class a
{
   void* m;
   unsigned type;

public:
   template<class T>
   a(T* p) :m(p), type(id_of<T>()) 
   {}

   template<class T>
   T* get() const
   { return (id_of<T>()==type)? static_cast<T*>(m): nullptr; }
};

您可以

访问数据
A* pa = my_a.get();
if(pa) { /* what has to be done with A */ }

如果你需要不止一个,可以考虑一个持有a的矢量的类b。

对于更“标准化”的实施,您可以查看boost::any