【发布时间】:2014-04-05 03:37:19
【问题描述】:
classy.h
struct Stack{
int *arr;
int numElements;
int capacity;
};
class Point {
private:
Stack *newStack;
public:
Point (int cap);
int returncap ();
~Point();
};
我认为问题不是 h 文件,而是两个 cc 文件之一
classy.cc
#include <iostream>
#include "classy.h"
using namespace std;
Point::Point(int cap){
newStack = new Stack;
newStack->numElements = 0;
newStack->arr = new int [cap];
if(newStack->arr == NULL) {
newStack->capacity = 0;
}
else {
newStack->capacity = cap;
}
}
Point::~Point(){
delete newStack->arr;
delete newStack;
}
int Point::returncap() {
return newStack->capacity;
}
main.cc
#include <iostream>
#include "classy.h"
using namespace std;
int main() {
int x;
cout << "Please insert cap: "<< endl;
cin >> x;
Point p (x);
cout << p.returncap();
p.~Point();
return 0;
}
我是错误地调用了析构函数还是它是我的实现?还是我错过了他们的某些观点?基本上在程序退出之前得到一个内存映射。
【问题讨论】:
-
你不应该显式调用析构函数并且你不应该在这里使用指针(使用
std::vector<int>和Stack而不是指针),但是当你这样做时,您必须匹配new和delete上的方括号。 -
如果你使用
new[]分配你需要使用delete[]。 -
抱歉忘记删除时的 [] 是我的一个坏习惯
-
@Pipsydoodles - 更好的习惯是使用 STL
-
我看到您刚刚编辑了您的帖子以解决问题...我认为最好不要这样做,因为现在看到此线程并想知道答案在说什么的人会感到困惑。