构造函数和析构函数
#include<iostream>
using namespace std;
class seqStack {
private:
int* _pstack;
int _size;
int _top;
public:
seqStack(int size) {
_size = size;
_pstack = new int[size];
_top = -1;
}
~seqStack() {
delete[]_pstack;
_pstack = nullptr;
}
int full() {
return _top == _size - 1;
}
void resize() {
int* newstack = new int[2 * _size];
for (int i = 0; i < _size; i++) {
newstack[i] = _pstack[i];
}
_pstack = newstack;
_size *= 2;
}
int empty() {
return _top == -1;
}
void push(int val) {
if (full()) {
resize();
}
_pstack[++_top] = val;
}
void pop() {
if (empty()) {
return;
}
cout << _pstack[_top--] << endl;
}
};
int main() {
seqStack st(4);
for (int i = 0; i < 10; i++) {
st.push(rand() % 100);
}
cout << sizeof(st) <<endl;
while (!st.empty()) {
st.pop();
}
return 0;
}
- 构造函数可以带参,可以重载。
- 析构函数不带参数,只能有一个。
- 构造和析构类似入栈和出栈,先构造后析构,后构造先析构。
- 堆上的类对象,不会在程序结束后自动释放,需要手动释放。因此一定要手动调用析构函数
int main() {
seqStack* st = new seqStack(4);
for (int i = 0; i < 10; i++) {
st->push(rand() % 100);
}
cout << sizeof(st) <<endl;
while (!st->empty()) {
st->op();
}
delete st;
return 0;
}
- 栈上初始化一个类对象,两步:开内存,调用构造函数。
- 堆上new一个类对象,两步:malloc申请一段空间,调用构造函数。
- free和delete都用来释放堆上申请的空间,它们在释放类对象的区别是什么?delete释放类对象是两步:
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 独立项目运营一周年经验分享
· 一款开源免费、通用的 WPF 主题控件包
· 神解释:为什么程序员怕改需求?
· 【定时任务核心】究竟是谁在负责盯着时间,并在恰当时机触发任务?
· 独立开发,这条路可行吗?