对copy-constructor的一点理解

Memberwise Initialization

在默认情况下,当以某个class object作为另一个object的初值时,会发生成员逐一初始化,

1
2
Example E1(8);
Example E2 = E1;

class data member会被依次复制,即对象中的每个成员都会被复制到另一个对象的相应成员上。

对于这种情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Matrix {
public:
Matrix(int row, int col) : _row(row), _col(col)
{
_pmat = new double[row * col];
}
~Matrix()
{
delete [] _pmat;
}
private:
int _row, _col;
double *_pmat;
};


// in this case

Matrix mat(4, 4);
//此处constructor发生作用
{
Matrix mat2 = mat;
// 此处进行了default memberwise initialization
// ...
// 此处,mat2的destructor发生作用。
}

根据默认的成员逐一初始化,mat2._pmat = mat._pmat,所以这两个指针指向了同一个堆内存空间内的数组,当mat2的析构函数发生作用时,该内存空间便被释放,但是mat的指针还是指同一空间,此时再使用这个指针就会产生严重错误。

💡 阅读更多

很久之前做的一些PTA上的题目

2021年年初的时候学习算法时做的一些PTA上的题,一直放在电脑里不舍得删但看着麻烦也怕丢失就放到了github的仓库里。

https://github.com/yydrowz3/somePTAProblemsCode

具体的题号没有写明,文件的名字是由题目的标题变化而来,如果真的想找到原题的话可以用对应的文件名搜一下题。

由于实在是间隔甚远再加上当时偷懒没做好标记,无力单独分开汇总。或许哪天有空了再说。

都是能AC的代码,也不求能帮到别人,只是想记录一下当时敲过的这些东西。

💡 阅读更多

最近的一些想法和说给自己的碎碎念

想了一下,也真的是好久没写东西了,经典明天小测验现在摆烂不复习。其实也不是什么故意不复习,就只是感觉现在没有那么患得患失了,对这种东西看得不是那么重,也许这也仅仅是我懒得动脑子的借口罢了。

最近一直感觉自己脑子里很乱,有很多的想法,当然其中也包括了不少垃圾想法,现在在敲这些文字的时候也感觉有很多想写但是又不知道写什么,语言完全组织不起来,不知道这是什么情况。现在宿舍里就我一个人,但是舍友也大概要回来了,暂停了耳机里的歌,希望这短暂的安静的环境能让我好好整理一下脑子里的东西。

💡 阅读更多

巨龙坎是怎么回事呢?【多图预警】

一周年直播过后的第一天,溜了一天的切片了,复习之余闲的没事记录一下前几天的巨龙坎经历。

事情的起因是前几周看到A-SOUL官方发的和小龙坎的工商,就是一个吃火锅送立牌的活动。说实话自己其实对火锅没有那么大的兴趣,但是看到A-SOUL来自己在的城市线下活动了还是一下子挺兴奋的。其实是想去线下发病

💡 阅读更多

在学C++Primer做的一些笔记

大概是一个月前,实在是闲的没事,在图书馆想找点C++的书学习学习这个我一直没深入的语言。本来是奔着Essential C++去的,结果找了一圈只有英文版的而且还是旧版,想想就还是算了吧,这种技术肯定是要看新标准的更好。最后只找到了这本C++ Primer,虽然我内心对这种大部头的书比较抗拒,但是要想学好一门技术,这种权威的书籍是最好的。

看看这包浆的封面和书页,这块大砖也肯定帮到过不少人吧。

💡 阅读更多

用React做的一个简易记事本(2):客户端

React项目的初始化搭建

由于手动搭建React环境过于麻烦,要的依赖相当多,需要花费大量时间在配置上,所以就直接使用React官方提供的create-react-app脚手架工具。

脚手架的使用有两种方法,一种是先用npm或yarn全局安装create-react-app然后再create-react-app my_app,另一种是使用npx create-react-app my_app这样就不用提前安装好create-react-app工具。

💡 阅读更多

记一些Markdown的基础标签写法

由于很久没有写博客了,很多Markdown的写法已经忘得差不多了。再加上最近又发现自己记忆力下降非常严重,学习新的东西不做点笔记实在是不行了,做笔记的话看了一下还是直接用md写比较方便,毕竟md用熟了以后玩GitHub的时候也能稍微写点像模像样的README。

所以在这里记录一下方便我以后要用了但想不起来时有地方找。

💡 阅读更多

一个简单的React事件绑定

需要事件绑定的原因

首先说明一下,React生成出来的事件,里面的this并不是指向自身的,这是Javascript语法的规定,是不可避免的。

比如<button onClick={this.plus}>plus</button>中,plus上的this其实是绑在了window上的,也就是事件响应时的上下文,并不是当前的组件实例。说简单点,就是当触发该事件时,是在浏览器的总的一个环境里的,所以这时事件里如果用到this的话,this指向的其实是window。

但是这样会使得事件的使用和处理变得相当麻烦,所以这时就需要将事件内的this指针转移到事件的作用域上。

简单看一下bind()函数

调用 bind() 会创建一个新的函数,当这个新函数被调用时,函数内部的this会被置为参数提供的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var example = {
value: 114514,
getValue: function() {
return this.value; //这里使用了this
}
}

var unbindThis = example.getvalue;
console.log(unbindThis()); // 调用的对象是window,所以里面的this.value => window.value
// output: undefined

var bindThis = unbindThis.bind(example);
console.log(bindThis()); // 但是bind之后,会将this的值置为example提供的值
// output: 114514
💡 阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×