美文网首页C++复习
c++值语义、引用语义

c++值语义、引用语义

作者: 凉拌姨妈好吃 | 来源:发表于2018-04-29 16:58 被阅读17次
  • 值语义:对象的拷贝与原对象无关,c++中将基础类型都定义为值语义,c++规定凡是能够放入标准容器内的类型必须具有值语义。
  • 引用语义:一个对象被系统标准的复制函数复制后,与被复制的对象共享底层资源,只要一个改变了另外一个就会改变。
如何判断一个自定义对象是否为值语义?

判断该对象在发生拷贝时,是否需要重写operator =。

c++编译器会为类提供默认的拷贝构造函数和重载函数,一般我们不需要自己重写这些,因为只要每个数据成员都为值语义,编译器就可以调用默认的成员拷贝(浅拷贝)。

那么就引出了一个问题,一些类在实际中是不可复制的(拷贝一个线程、拷贝一个雇员也是不合理的,因为一个雇员不会变成两个雇员),但是因为c++编译器会为类提供默认的拷贝构造函数和重载函数,所以我们在编写对象的时候最好加上non-copyable。

因为类复制的不合理性,所以我们才有了引用计数这个概念。
总结来说,引用计数不单单是可以防止内存溢出,还可以避免一些无意义的对象复制。我们使用shared_pre就是将引用语义转换为值语义,因为值语义我们不需要去管理它的内存,在该释放的时候,编译器就会自动替我们释放

相关文章

  • c++值语义、引用语义

    值语义:对象的拷贝与原对象无关,c++中将基础类型都定义为值语义,c++规定凡是能够放入标准容器内的类型必须具有值...

  • iOS结构体和类的区别

    1,语义: 类:引用类型(引用语义),需要自己管理其引用计数、引用值得变化结构体: 值类型(值语义),在设计结构体...

  • 值语义与引用语义(对象语义)

    值语义: 目标对象由源对象复制生成,与源对象完全独立,互不影响。 对象语义: 目标对象由源对象复制生成,部分或全部...

  • SAP ABAP 写时拷贝(Copy on Write)策略的一

    值语义(Value semantics)和引用语义(reference semantics)描述了动态内存对象在多...

  • C++右值引用

    C++右值引用 右值引用应该是C++11引入的一个非常重要的技术,因为它是移动语义(Move semantics)...

  • C++ 左值引用&右值引用&转移语义

  • iOS_struct与class的取舍

    Q: 究竟什么时该用struct, 什么时候用class呢?A: 需要值语义的时候用struct, 需要引用语义的...

  • 18/2

    移动语义与右值引用(只能在右边) 1.移动语义:实际文件还留在原来地方,而只是修改记录,移动语义实际上避免了移动原...

  • 【C++11】右值引用

    右值引用是C++11中一个非常重要的特性。 右值引用的提出,是为了在语法层面,解决向C++中添加移动语义时难以解决...

  • C/C++学习笔记丨C++11语言扩展:常规特性

    本节内容:auto、decltype、基于范围的for语句、初始化列表、统一初始化语法和语义、右值引用和移动语义、...

网友评论

    本文标题:c++值语义、引用语义

    本文链接:https://www.haomeiwen.com/subject/gvgolftx.html