我有一个类与构造函数和析构函数和一个其他方法。 当我创建这个类的新实例,然后它调用析构函数的地方,我不知道为什么。堆 - 构造函数和析构函数,内存分配
class Heap
{
private:
int *heap;
int size;
int heap_size;
public:
Heap(int new_size)
{
size = new_size;
heap_size = 0;
heap = (int*)malloc(new_size*sizeof(int)); //???
//heap = new int[new_size]; //???
}
~Heap()
{
free(heap);
}
void add(int alfa)
{
// something
}
};
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(NULL));
int k = rand() % 100 + 1;
Heap *name = &Heap(k);
Heap *name2 = new Heap(k); //what's the diffrence?
while (k > 0)
{
name->add(rand()); // doesn't work, because destructor is called before
k--;
}
system("pause");
return 0;
}
'&堆(k)'您正在返回临时地址。 –
'main.cpp(31):warning C4238:使用非标准扩展:用作左值的类rvalue这应该是一个错误,但是微软的编译器默认破坏。永远不要忽视那个警告。 –
为什么你在班内使用'malloc'而不是'new []'? (但是,如果可能的话,你应该使用'std :: vector'或'std :: array'代替原始内存分配)。 – crashmstr