C++ Primer Chapter 12-1

来源:互联网 发布:音频发生器软件 编辑:程序博客网 时间:2024/06/11 18:03
1:shared_ptr 和 unique_ptr 都是智能指针分别指向可共享的对象和只能独占的对象,这些指针都是可以自动释放的。他们都是模板类  。

2: new 的用法 : 
  1. 1 type * p = new type;
该用法是用来申明一个type类型内存,然后把其地址 给 p;这个是申请单个内存块。另外该方法是隐含的调用 type类型的默认构造函数,也可以显示的在 type 后面加 () ,在括号中加参数来显示调用构造函数。如:

  1. int * p = new int (89);

  1. 2type * p = new type [n];
这个用法是来申请一块连续的内存,包含 n  个 type 类型的内存块。即用  [ ] 运算符来说明申请内存个数。并返回第一个元素的指针。

3:shared_ptr 能够的到与其共享对象的智能指针数量。 p.use_count() 

4:make_shared() 函数能够在动态内存中申请一块内存,然后返回一个智能指针指向该对象。该函数是一个模板函数,需要用 < type > 中的类型来实例化。
  1. make_shared<string> (10,"9");
  2. // 利用string(size_type size,char * str)来构造一个string,并返回 shared<string> 指针

另外该函数的参数由 type 的构造函数决定的,如果参数符合type 的某个构造函数就会调用该构造函数,如果没有参数就会调用默认构造函数


5:shared_ptr  都会记录其所指对象的引用计数,如果它指向了其他的变量,那么原来对象的所有引用计数值减一,并且新指向的对象所有引用计数值加一,如果原来对象没有指向其的指针,则释放其内存

6:shared_ptr 的析构函数递减其指向对象引用计数值,如果计数值变为零,那么释放对象内存

7:指针的位数只与编译器的位数有关,32 位 为 4 字节64 位 为 8 字节,与操作系统位数没有太大关系

8:动态内存可以使得多个对象一起共用一个底层数据,这样可以实现数据的共享

9:动态内存申请 const 类型对象和定义内置的 const 一样,需要进行初始化, 如果该类型有默认构造函数,则可以隐式的初始胡,如果没有则需要显式的初始化。

10:如果 new 申请内存失败,那么会抛出异常,如果我们不想让其抛出异常,可以用定位 new

11:delete 只能删除一个动态分配的内存 ,详见 page 409 

12:一个指针(内置类型) 被销毁时,其所指的内存不会发生什么(这样动态申请的内存就存在泄漏问题

0 0