str3(str1) , 拷贝 构造。
str3 = str1 , 拷贝 赋值。编译器, 默认提供。
类里面 带指针,
编译器 提供的 默认拷贝 构造, 直接 拷贝 指针。
所以, 一定要 重写。
String 类, 有 指针,
有一个 动态 分配的 过程。
{
String( const char* cstr = 0 );
// 构造函数
String( const String& str );
// 构造函数 , 拷贝 构造。
copy ctor
String& operator = ( const String& str );
// 操作符 重载, 拷贝 赋值。
copy op=
(
检测 自我 继承,( self assignment )
正确性 + 效率
提高 效率, 更重要的是 , ( 不写, 结果 可能会 出错。 )
)
~String();
// 析构函数
(
析构 函数 调用,
当对象 离开 他的 作用域。
)
// 要在 里面 清理, delete, 因为 动态 分配。
}
一个 字符串 多长, 的 计算方法:
我不知道 多长, 但是 最后面 有一个 结束 符号, '\0' .
C , C++
后面 没有 结束 符号, 前面 多一个 length.
Pascal
object_Class_A = object_Class_B ;
// 有 别名 效果, alias
浅拷贝: 指针 拷贝。
深拷贝 : 值拷贝。
Stack, 栈,是存在于 某作用域 scope 的 ,
一块 内存空间 memory space .
在函数 本体 function body 内,
声明的 任何变量。
auto object, 因为 他会被 自动 清理。
static 静态,
static local object 的 生命期。
Heap, 堆,
system heap ,
是 由 操作系统 提供的 一块 global 内存空间,
程序 可动态分配 dynamic allocated ,
从中 获得 若干 区块 blocks .
new 出来的 对象。
注意, 内存泄漏。
指针释放了, 指针 指向的 空间 还在。
Global Objects
全局对象
任何 大括号 之外的
对象。
谁 调用 这个 函数,
那个 谁, 就是 this .