【发布时间】:2016-02-03 15:11:01
【问题描述】:
我创建了一个日历类,其中一切似乎都工作正常,但就在程序结束之前,当调用析构函数时,它会导致调试断言失败!
这是课程:
//constructor
Calendar::Calendar(const int *pday, const int *pmonth, const int *pyear){
day = new int(sizeof(pday));
month = new int(sizeof(pmonth));
year = new int(sizeof(pyear));
day = pday;
month = pmonth;
year = pyear;
}
//copy constructor
Calendar::Calendar(const Calendar &rhs){
day = new int(sizeof(rhs.day));
month = new int(sizeof(rhs.month));
year = new int(sizeof(rhs.year));
day = rhs.day;
month = rhs.month;
year = rhs.year;
}
//operator '=' overload
Calendar& Calendar::operator=(const Calendar &rhs){
delete[] day;
delete[] month;
delete[] year;
day = new int(sizeof(rhs.day));
month = new int(sizeof(rhs.month));
year = new int(sizeof(rhs.year));
day = rhs.day;
month = rhs.month;
year = rhs.year;
return *this;
}
//deconstructor
Calendar::~Calendar(){
delete[] day;
delete[] month;
delete[] year;
}
可能是什么问题?我不是为类的变量创建内存吗?
【问题讨论】:
-
你为什么使用
delete[]?为什么你完全使用指针而不是整数? -
new[size] 也许?不是 new() 或只是删除
-
为什么您的默认日期是 4/4/4 或 8/8/8?
-
你真的应该从一个教程开始,如果可能的话,避免新的和删除的,直到你掌握其他概念......当你到达
new时,它可能会在@987654324中变得很明显@,arg与分配的内存大小无关。 -
去掉
sizeof(),使用delete代替delete []。虽然你根本不应该为这个类使用指针和动态分配。
标签: c++ class pointers memory destructor