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