需要协助c ++模板动态内存分配

时间:2012-06-22 05:53:39

标签: c++ templates

我写了一个模板类并且它有效 - 但由于某种原因,我的动态分配存在问题。数组的初始长度:旧的2新的4.第一次它的工作(旧的点(现在他的大小4)现在,新的大小为8)但是在下一轮 - 它在{ {1}}有堆问题。有任何想法吗?感谢

delete [] temp;

1 个答案:

答案 0 :(得分:0)

由于这是我刚刚创作的非常优雅的解决方案,你应该能够找到陷阱并扩展它。

#include <iostream>

using namespace std;

struct foo
{
  foo(int h) : g(h) { }
  int g;
};

template <typename T>
class bar
{
public:
  bar() : curSize(2), curNo(0)
  {
    a = new T[curSize];
  }

  void Add(T item)
  {
    if (curNo == curSize) {
      curSize = 2 * curSize;
      T *newArray = new T[2*curSize];
      for (size_t i = 0 ; i != curNo; ++i) {
        newArray[i] = a[i];
      }
      delete[] a;
      a = newArray;

    }
    a[curNo] = item;
    ++curNo;

  }

  void print()
  {
    for (size_t i = 0 ; i != curNo; ++i) {
      cout << a[i]->g << endl;
    }
  }



private:

  size_t curSize;
  size_t curNo;
  T * a;
};


int main()
{
 foo *f1 = new foo(1);
 foo *f2 = new foo(2);
 foo *f3 = new foo(3);
 foo *f4 = new foo(4);
 bar<foo*> *g = new bar<foo*>();
 g->Add(f1);
 g->Add(f2);
 g->Add(f3);
 g->Add(f4);
 g->print();
 cout << "Add more and print" << endl;

 g->Add(f1);
 g->Add(f2);
 g->Add(f3);
 g->Add(f4);
 g->Add(f3);
 g->Add(f4);

 g->print();

}