[英]Why can I not push_back a element into a vector pointer?
我的代碼如下:
#include <vector>
int main() {
std::vector<int> *vec;
vec->push_back(1);
return 0;
}
無論我嘗試使用哪個編譯器,該程序都會出現段錯誤。 我也嘗試使用智能指針,但它也有段錯誤。 我現在有兩個問題:
vector
的指針(特別是智能指針)是否有意義? 在我的在線搜索中,我只看到了相反的方向,一個unique_ptr
的vector
。 哪個更有意義,為什么?指針是微不足道的對象,因此默認初始化的結果是它的值是不確定的。 既然這就是你所做的,你的指針不會指向任何東西。 這意味着試圖訪問它指向的東西會導致未定義的行為。
您需要創建一個 object 供您的指針指向。 例如,您可以動態分配一個new std::vector<int>
:
std::vector<int>* vec = new std::vector<int>;
vec->push_back(1); // fine
delete vec; // dynamically-allocated, so you have to delete it when you're done with it
不過,基本上沒有理由這樣做。 std::vector
本質上已經只是一個指向動態分配數組的指針,外加一點額外的元數據來存儲數組的大小。 動態分配std::vector
而不是僅在本地聲明它(或作為某些 class 等的數據成員)的正當理由很少:
std::vector<int> vec;
vec.push_back(1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.