[英]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.