vector<string> v1; 宣告的 v1 物件本身(包含三個指標:開始、結束、容量末端)配置在宣告所在的記憶體區域:
new 配置 → 堆積但 vector 內部管理的元素陣列(string 物件)永遠在堆積(由配置器 allocator 管理)。
class A {
public:
A() : v1(10) { v1[0] = "abc"; }
vector<string> v1;
};
A* getA() {
A* a = new A; // A 物件在堆積
return a; // v1 也在堆積(隨 A)
}
int main() {
A* b = getA(); // b 指向堆積上的 A
cout << b->v1[0]; // 輸出 "abc",v1 元素在堆積,存活
return 0;
}
A 在堆積,其成員 v1 物件也在堆積;A 在堆疊,v1 也在堆疊。vector 內部指標指向堆積記憶體,與容器物件本身位置無關。「不用
new就都在堆疊,堆疊空間小,所以要多用new。」
錯誤。堆疊預設 1~8 MB,足以支撐大多數區域物件。大型資料、生命週期超出作用域、需動態大小 才用堆積。盲目 new 反而易造成記憶體洩漏、碎片化。
std::shared_ptr,獨佔用 std::unique_ptr。