从零单排c++ primer(12)

(1)函数退出有两种可能,正常处理结束或者发生了异常,无论哪种情况,局部对象都会被销毁。
(2)当发生异常时,直接管理的内存是不会自动释放的。
(3) 大多数应用应该使用标准库容器而不是动态分配的数组。使用容器更为简单、更不容易出现内存管理错误并且可能有更好的性能。
(4) 通常称new T[ ]分配的内存为“动态数组”,但并不是数组类型。
(5) 在默认情况下,new分配的对象,不管是单个分配的还是数组中的,都是默认初始化的。
(6) 动态分配一个空数组是合法的的。
(7) 如果在delete一个数组指针时忘记了方括号,或者在delete一个单一对象的指针时使用了方括号,编译器很可能不会给出警告。程序可能在执行过程中在没有任何警告的情况下行为异常。
(8) new有一些灵活性上的局限,其中一个方面表现在它将内存分配和对象构造组合在了一起。
(9) allocator分配的内存是尚未构造的,还未构造对象的情况下就是用原始内存是错误的。
(10) 为了使用allocate返回的内存,必须用construct构造对象。使用未构造的内存,其行为是未定义的。
(11) 只能对真正构造了的元素进行destroy操作。
(12)一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数式拷贝构造函数。
(13)如果没有为一个类定义拷贝构造函数,编译器会为我们定义一个。
(14) 使用拷贝初始化,要求编译器将右侧运算对象拷贝到正在创建的对象中,如果需要的话还要进行类型转化,拷贝初始化通常使用拷贝构造函数来完成的。
(15) 拷贝初始化不仅在我们使用=定义变量时会发生,在下列情况下也会发生:
                1.将一个对象作为实参传递给一个非引用类型的形参。
                2.从一个返回类型为非引用类型的函数返回一个对象。
                3.用花括号类表初始化一个数组中的元素或一个聚合类中的成员。
(16) 赋值运算符通常应该返回一个指向其左侧运算对象的引用。
(17)析构函数是类的一个成员函数,名字由波浪号接类名构成,它没有返回值,也不接受参数,其作用是释放对象的使用的资源,并销毁对象的非static数据成员。
(18)隐式销毁一个内置指针类型的成员不会delete它所指向的对象。
(19) 当指向一个对象的引用或指针离开作用域时,析构函数不会执行。
(20)认识到西沟函数体自身并不直接销毁成员是非常重要的。成员是在析构函数体之后隐含的析构阶段中被销毁的。在整个对象销毁过程中,析构函数体是作为成员销毁之外的另一部分而进行的。
(21) 如果一个类需要自定义析构函数,几乎可以肯定它也需要自定义拷贝复制运算符和拷贝构造函数。
(22) 如果一个类需要一个拷贝构造函数,它也需要一个拷贝赋值运算符,反之亦然。
(23) 我们只能对具有合成版本的成员函数使用=default。
(24)在新的标准下,我们可以通过将拷贝构造函数和拷贝赋值运算符定义为删除的函数来阻止拷贝。
(25) 对于析构函数已删除的类型,不能定义该类型的变量或释放指向该类型动态分配对象的指针。
(26) 如果一个类的数据成员不能默认构造、拷贝、复制或销毁,则对应的成员函数将被定义为删除的。

你可能感兴趣的:(C++,程序员,学习,语言,C++Primer)