我有一個類與構造函數和析構函數和一個其他方法。 當我創建這個類的新實例,然後它調用析構函數的地方,我不知道爲什麼。堆 - 構造函數和析構函數,內存分配
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