值语义与对象语义

来源:互联网 发布:psd头像源码免费下载 编辑:程序博客网 时间:2024/05/18 13:04

【1】什么是值语义?

所谓值语义是指目标对象由源对象拷贝生成,且生成后与源对象完全无关,彼此独立存在,改变互不影响。就像 int 类型变量相互拷贝一样。

C++的内置类型(bool/int/double/char)都是值语义,标准库里的 complex<>、pair<>、vector<>、map<>、string 等等类型也都是值语义。

拷贝之后就与源对象完全脱离关系。

【2】什么是对象语义?

对象语义也叫指针语义,引用语义等。

通常是指一个目标对象由源对象拷贝生成,但生成后与源对象之间依然共享底层资源,对任何一个的改变都将随之改变另一个。

就像包含有指针成员变量的自定义类在默认拷贝构造函数下对其对象之间进行的拷贝。拷贝后目标对象和源对象的指针成员变量仍指向同一块内存数据。

如果当其中一个被析构掉后,另一个对象的指针成员就会沦为名副其实的悬垂指针!

又比如,Thread 是对象语义,拷贝 Thread 是无意义的,也是被禁止的:因为 Thread 代表线程,拷贝一个Thread对象并不能让系统增加一个一模一样的线程。

原创粉丝点击