首页 > 其他分享 >10构造函数与析构函数

10构造函数与析构函数

时间:2024-01-16 10:47:42浏览次数:32  
标签:10 seqStack int 与析构 top pstack 构造函数 size

构造函数和析构函数

#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];
			//这里要慎用memcpy和realloc,参考深拷贝与浅拷贝
		}
		_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();
	}
    //st是栈上的对象。离开作用域(本函数),析构自动调用。
	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;
    //st是栈上的指针对象,但它指向的堆上的对象会一直占据空间。
	return 0;
}
  • 栈上初始化一个类对象,两步:开内存,调用构造函数。
  • 堆上new一个类对象,两步:malloc申请一段空间,调用构造函数。
  • free和delete都用来释放堆上申请的空间,它们在释放类对象的区别是什么?delete释放类对象是两步:
    • 调用此类的析构函数。
    • free类对象的指针。

标签:10,seqStack,int,与析构,top,pstack,构造函数,size
From: https://www.cnblogs.com/sio2zyh/p/17967086

相关文章

  • P1002题解
    思路设\(dp_{i,j}\)表示第\(i\)行\(j\)列卒走到这里有多少种方式。卒是可以向右和下走,所以到这个点只能从左或上来,不难得出转移公式:\(dp_{i,j}=dp_{i-1,j}+dp_{i,j-1}\)。如果马在这个点上或者说马能到这个点上,那么卒不能到这个点,也就是卒到这个点的方式为\(0\)。如......
  • P1003题解
    简单模拟题。思路枚举每一个地毯,因为后面的会覆盖前面的,所以从正序枚举。如果要求的点的坐标在当前地毯上,则将答案赋值为当前地毯编号。最后输出答案。那如果这个点没有地毯呢?答案初始设为\(-1\),这样没有地毯覆盖的话,答案不会改变,这样输出答案就会是\(-1\)。注意:记得赋初......
  • 初中英语优秀范文100篇-059Let’s Play Basketball-让我们打篮球吧
    PDF格式公众号回复关键字:SHCZFW059记忆树1Playingbasketballhasseveraladvantages.翻译打篮球有很多好处简化记忆好处句子结构主语是"Playingbasketball",表示一种活动。谓语是"has",是第三人称单数形式,表示现在完成时态。宾语是"severaladvantages",是一个名......
  • P10058题解
    怎么前三题都是思维题啊。思路总共有三个操作,先不看翻转操作。如果你右移\(x\)位之后,左移\(x\)位,那么就相当于没有操作。这个应该是很好理解的。我们根据上面的结论,能得出以下代码。if(op==">"){cin>>x;f+=x;}elseif(op=="<"){......
  • 1月10日总结
    在组织结构:团队成员40人左右,业务特点:有大量老服务、流量波动大(峰值集中在中午和傍晚)、流量不可预测。背景:以业务发展为主,对稳定性关注较少,各项目使用的规范和工具不一致,两年台出了几次事故,开始重视稳定性建设,成立稳定性保障小组,推动稳定性工作。稳定性小组的组成:img稳定性保障......
  • 【题解】gym103743 (2022 JSCPC)
    A.PENTAKILL!考虑直接模拟,规则就是一个人将其他人全部都击杀,并且中间没有重复击杀。code:#include<bits/stdc++.h>usingnamespacestd;map<string,vector<string>>st;intn;stringa,b;intmain(){cin>>n;for(inti=1;i<=n;++i){ci......
  • 事务Transactional失效的这10个场景,你一定得知道!
    @Transactional失效的场景都有哪些呢?如图所示!以上我们列举了10种场景,接下来我们针对不同的场景来具体的分析下。一、代理不生效导致1、同一个类中,方法内部调用事务失效同一个类中,addOrder()方法无事务,addOrder2()方法存在事务,addOrder()调用addOrder2()。我们通过外部方法调用addOr......
  • 紫光展锐T610安卓核心板_虎贲T610安卓核心板性能参数
    紫光展锐T610核心板是一款紧凑结构设计的智能模块,尺寸标准为52.5MM38.5MM2.9mm,适合对产品结构尺寸要求更高的场景。核心板搭载Android11操作系统,采用12nm制程工艺,拥有八核1.8GHZ的处理器,由[email protected][email protected]构成,内存为6GB+128GB。此外,还配备了强大的ARMMali......
  • width:100%与width:auto区别
    小知识width:100%与width:auto区别width:100%:子元素的content撑满父元素的content,如果子元素还有padding、border等属性,或者是在父元素上设置了边距和填充,都有可能会造成子元素区域溢出显示;width:auto:是子元素的content+padding+border+margin等撑满父元素的cont......
  • 5G穿墙王!TP-LINK发布BE5100 Wi-Fi 7路由器:2.5G网口 279元
    1月14日消息,日前,TP-LINK发布BE5100Wi-Fi7路由器,到手价279元,支持MLO、4KQAM、MRU、前导打孔等Wi-Fi7新特性。据介绍,在MLO多链路技术加持下,2.4G+5G叠加快至7.3倍,4KQAM高阶调制,速率提升至120%。MRU技术允许将多个资源块分配给单个用户,提升传输效率,降低延迟。TP-LINKBE5100......