short string optimization,短字符串优化,小于等于MaxStackSize长度的字符串存放在字符数组中(栈),超出则存储字符数组首地址(用new创建数组)
class MyString {
static const size_t MaxStackSize = 15;
union {
char c1[MaxStackSize + 1]; //栈中开辟内存空间
char* c2; //指针存放在栈中,字符串数据用new创建(存放在堆内存)
};
size_t len;
size_t cap;
public:
~MyString() {
if (len > 15) {
delete[] c2;
}
}
MyString(const char* _c) {
len = strlen(_c);
if (len > 15) {
cap = len + 8 + 1; // 容量大小=实际大小+8
c2 = new char[cap];
memcpy(c2, _c, len+1); // +1表示把NULL符也复制到c2
}
else {
memset(c1, 0, MaxStackSize + 1);
memcpy(c1, _c, len +1);
cap = MaxStackSize;
}
}
size_t length() const {
return len;
}
size_t capacity() const {
return cap;
}
};