今日学习:拷贝控制操作与移动赋值等,类中vector的初始化问题,死锁

1、 关于拷贝控制这一块的内容太多且琐碎,需要的时候再翻书。

  1. 引用限定符必须同时出现在函数的声明和定义中,其作用是限定向左值赋值还是向右值赋值。
  2. 当同时有const限定符时,引用限定符要加在const限定符后面。
  3. 引用限定符也可以区分重载版本。
  4. 如果一个成员函数有引用限定符,则具有相同参数列表的所有版本都必须有引用限定符。

class Foo {
public:
	Foo& operator=(const Foo&) &;   //只能向可修改的左值赋值
};
Foo& Foo::operatpr=(const Foo& rhs) & {
	//
	return *this;
}

2、类中vector的初始化问题

在力扣刷题的时候,经常会使用vector,今天在使用时就遇到了问题:在类的成员函数之外定义并初始化vector时出现了错误,然后我就试验了一下:

class Test {
public:
	vector<int> v1(10,0);  //错误;
	vector<int> v2(10);	  //错误;
	vector<int> v3{1,2,3}; //正确;
	vector<int> v4={1,2,3}; //正确;
	vector<int> v5=vector<int>(5); //正确;
	vector<int> v6=vector<int>(5,0);  //正确;

通过上面的例子来看,成员变量vector似乎不能直接初始化,只能使用拷贝初始化。原因未知,我猜应该与vector的构造函数或者拷贝构造函数有关,记录一下。
这是

3、死锁

  • 定义:是指两个以上的进程在运行过程中因争夺资源而造成相互等待的现象, 若无外力作用,他们将无法再向前推进。

  • 原因: 系统资源不足 进程运行推进的顺序不合适 资源分配不当

  • 产生的必要条件
    互斥条件:一个资源只能被一个进程使用
    请求与保持条件:一个进程因请求资源而阻塞时,对以获得的资源保持不放。
    不可剥夺条件:进程已经获得资源,在未使用完之前,不能强行剥夺
    循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

  • 死锁的解除和预防:
    解除:破坏四个产生死锁的必要条件之一即可(资源一次性分配,只要有一个资源的不到分配就不给他分配其他资源,可剥夺资源,资源有序分配法)
    预防:确定顺序获得锁,超时放弃(银行家算法) 死锁检测:jstack命令,jconsole工具

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值