簡體   English   中英

指針向量C ++

[英]Vectors of pointers C++

我必須創建指向類對象的指針向量列表。 但是,似乎在初始化向量時,沒有內容寫入其中。 這是代碼:

main.c

#include "circle.h"
#include <iostream>
#include <vector>

using namespace std;

int main(){
vector<Circle *>vectors(2);
vectors.push_back(new Circle("Circle1" , 4 , 0 , 0));
cout << vectors[0]->name << endl;

return 0;

}

圓h

#ifndef CIRCLE_H
#define CIRCLE_H

#include <string>

class Circle
{
public:
    std::string name;
    int radius;
    int x;
    int y;

    Circle();
    Circle(std::string givenName, int givenRadius , int givenX , int     givenY);
    double circleLength(int radius);
    ~Circle();
};


#endif // CIRCLE_H

circle.cpp

#include "circle.h"
#include <iostream>


const double PI  =3.141592653589793238463;



Circle::Circle(std::string givenName , int givenRadius, int givenX, int  givenY)
{
    name = givenName;
    radius = givenRadius;
    x = givenX;
    y = givenY;
}

Circle::Circle(){

}

double Circle::circleLength(int radius)
{
    return 2 * PI * radius;
}

Circle::~Circle(){
}

而且我得到空的輸出。

PS:謝謝大家的幫助。 錯誤是由於缺乏理論知識引起的。 我認為

vector<Circle *>vectors(2);

會為數組中的兩個元素分配內存,當我開始填充它時,計數將從0開始。我的錯。

vector<Circle *>vectors(2);

您正在創建一個包含兩個元素的向量,下次調用push_back會將元素置於第三個位置

vectors.push_back(new Circle("Circle1" , 4 , 0 , 0);
cout << vectors[2]->name << endl;
 vector<Circle *>vectors(2); 

這將創建一個帶有兩個元素的std::vector ,兩個元素都初始化為nullptr

 vectors.push_back(new Circle("Circle1" , 4 , 0 , 0)); 

這將添加第三個元素,該元素不是nullptr

您的向量現在看起來像這樣:

nullptr
nullptr
Circle
 cout << vectors[0]->name << endl; 

因此,這將嘗試取消引用nullptr ,這將導致未定義的行為 什么都可能發生。

解決此問題的一種方法是將向量初始化為空向量:

vector<Circle *>vectors;
vectors.push_back(new Circle("Circle1" , 4 , 0 , 0));

請注意,您可能應該使用std::unique_ptr而不是原始指針:

std::vector<std::unique_ptr<Circle>> vectors;
vectors.emplace_back(std::make_unique<Circle>("Circle1" , 4 , 0 , 0));

您當前的代碼永遠不會調用delete來釋放new分配的內存。 std::unique_ptr自動處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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