簡體   English   中英

為什么我不能將元素 push_back 到向量指針中?

[英]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_ptrvector 哪個更有意義,為什么?

指針是微不足道的對象,因此默認初始化的結果是它的值是不確定的。 既然這就是你所做的,你的指針不會指向任何東西。 這意味着試圖訪問它指向的東西會導致未定義的行為。

您需要創建一個 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM