日志20191202(2)

#include <iostream>
#include <vector>
using namespace std;


#if 0

命令行模式下
ctrl + l  清屏
ctrl + h  删除字符

printenv | grep PATH

test=goodcpp	=两边没有空格
echo $test
export test		将环境变量加入当前范围中
unset test		卸载test环境变量
vim ~/.bashrc

vim --version	vim 版本
Esc状态下	
	hjkl 对应 右下上左
	o (小字母o) 在下插入一行
    x删除当前字符,dd删除整行
	a在当前字符的后面写入字符,i当前字符的前面写入字符
	0(零) 移动到行首
	$	移动到行尾
	/需要查找字符	回车调用第一个字符,n向下查找 N向上查找
	?需要查找字符	回车跳到最后一个字符
	dd 删除一行(实际是剪切), p粘贴
	yy 复制当前行 p粘贴(当前行的下一行)
	u 回撤一步   crtl+r前进一步
	. 重复上一个命令
	数字 命令 重复命令n此,例子:2dd,连续删除两行
	数字G  跳到第n行
	gg 直接跳到第一行
	G	直接跳到最后一行
	%	从左括号跳到右括号
	*或者#	向下或者上查找该单词
	gg=G 全部自动对齐
Esc : (esc+冒号) 
	set number	显示行号
	数字 回车	跳到第n行

Esc v
	选择模式,通过控制hjkl选择,然后y(复制)p(粘贴),d(删除)  = 自动对齐 

#endif

class A1 {
public:
	A1() :mval(new int(3)) {}
	~A1() {
		cout << "~A1()" << endl;
		delete mval;
	}
	void myprint() {
		cout << "myprint()" << endl;
	}
private:
	int mdata[100];
	int* mval;
};

void test1() {
	char p1[1024];
	char* p2 = new char[1024];
	A1* a1 = new(p1)A1();	//p1 p2效果等同

	//a1->~A1();	//不会有异常
	//delete a1;	
	//会抛出异常,默认先调用析构函数,然后把资源还给系统,
	//然而char p1[1024]不是从new中获得而来,释放了不是由该类申请的内存
	//如果由new申请的内存,则由delete负责处理
	//delete = 1.调用析构函数,释放对象中的成员资源
	//         2.归还对象空间(free)
	vector<A1> a;
	a.reserve(100);	//类比于placementnew(),申请一大块连续的空间,没有调用构造函数

	A1* a2 = new A1();
	a2->~A1();		
	delete a2;	
	a2 = NULL;
	a2 = (A1*)p1;
	a2->myprint();		//单纯调用myprint()不会出错,无论a2是delete还是NULL还是类型强转
	//析构函数和delete一块写也错,同一块空间被释放了两次
	//如果析构函数中没有释放成员变量的资源,则不会出错
	//调用析构函数之后,可以认为调用一个普通函数,该类对象还存在
	//delete之后,对象指针所指向的内存就放在空闲内存池中(即所谓的归还给系统),
		//当进行其他操作时,该对象指针所指向的内存可能被覆盖写入。
}



int main()
{
	test1();
	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值