type
status
date
slug
summary
tags
category
icon
password
Property
除了定义类的对象如何初始化之外,类还需要控制拷贝、赋值和销毁对象时发生的行为
- 对象在初始化变量以及以值的方式传递或返回一个对象等情况下会被拷贝
- 当使用赋值运算符时会发生对象的赋值操作
- 当对象不再存在时执行销毁的操作,比如一个局部对象会在创建它的块结束时被销毁,当
vector
对象(或数组)销毁时存储在其中的对象也会被销毁
默认情况下,
C++
编译器至少会给一个类添加3个函数。- 默认构造函数(无参,函数体为空) )
- 默认析构函数(无参,函数体为空) )
- 默认拷贝构造函数,对属性进行值拷贝
构造函数的调用规则如下:
- 如果用户定义了有参构造函数,
C++
不会再提供默认构造函数(可自己写一个),但是会提供拷贝构造。
- 如果用户定义了拷贝构造函数,
C++
不会再提供其他构造函数(只提供析构)
如果不主动定义这些操作,则编译器将替我们合成它们。一般来说,编译器生成的版本将对对象的每个成员执行拷贝、赋值和销毁操作。
尽管编译器能合成拷贝、赋值和析构函数,但是对于某些类来说,合成的版本无法正常工作。特别是,当类需要分配类对象之外的资源时,合成的版本通常会失效。
注意:很多需要动态内存的类能且应该使用
vector
对象或者string
对象管理必要的存储空间。使用vector
或者string
的类能避免分配和释放内存带来的复杂性。