C++ 如何格式化指针上的push_?
我有一个函数,我想在其中向向量中添加指针C++ 如何格式化指针上的push_?,c++,pointers,polymorphism,C++,Pointers,Polymorphism,我有一个函数,我想在其中向向量中添加指针 #include "Car.hpp" using namespace std; bool CarManagementSystem::addCar(Car::CarType new_car_type) { if (Car::CarType(new_car_type) == (Invalid)) { return false; } else{ new Car::CarType(new_car_type
#include "Car.hpp"
using namespace std;
bool CarManagementSystem::addCar(Car::CarType new_car_type) {
if (Car::CarType(new_car_type) == (Invalid)) {
return false;
}
else{
new Car::CarType(new_car_type);
carVector.push_back(Car::CarType(new_car_type));
return true;
}
}
push_back
命令让我非常难过,因为我希望约束采用什么形式。我希望能够使用此功能创建不同类型的我的目标车,但我不确定如何做到这一点
汽车类是我所有不同类型汽车的纯虚拟基类
#include "Car.hpp"
Car::~Car() {
}
Car::CarType Car::type() const {
return AT_INVALID;
}
class CarSystem {
private:
double Balance;
double CarCost;
std::vector<Car*> carVector;
...
#包括“Car.hpp”
汽车::~Car(){
}
Car::CarType Car::type()常量{
返回时无效;
}
等级制{
私人:
双平衡;
双重成本;
std::向量向量向量机;
...
你的向量应该是Car*的向量:
std::vector<Car*> carVector;
这里的Van*也是一辆车*。
确保在某个点删除向量的内容,或使用智能指针
一个更好的解决方案可能是在Car类中有一个enum来声明Car的类型,然后您就不需要处理指针了。您遇到的问题是,这个代码片段不符合您的想法:
new Car::CarType(new_car_type);
carVector.push_back(Car::CarType(new_car_type));
- 第一行创建了一个指向新的
对象的指针(一个enum,一个int,我不知道您是如何定义它的)。这个指针会立即丢失并导致内存泄漏CarType
- 第二行尝试将
对象推回,该对象显然不是指针CarType
CarType
并构造一个具体的car。在代码中不清楚car
是否是一个无法实例化的抽象类型,或者它是否是一个具体的类,在CarType
周围有一些变化
如果Car
的构造函数将CarType
作为参数,则需要执行以下操作:
bool CarManagementSystem::addCar(Car::CarType new_car_type) {
...
else{
carVector.push_back(new Car(new_car_type));
return true;
}
}
但是,如果Car
是一个带有派生类的抽象类型,那么您可以选择以下内容:
bool CarManagementSystem::addCar(Car::CarType new_car_type) {
Car *c;
switch (new_car_type) {
case AT_SUV:
c = new SUV; // if SUV would be a class derived from Car
break;
case AT_RACING_CAR:
...
case AT_INVALID:
default:
return false;
}
carVector.push_back(c);
return true;
}
在这种情况下,您可能会对一个很好的工厂方法模式实现感兴趣,如中所述。首先,您确定需要一个指针吗?其次,听起来您需要一个指针来学习C++的正确语法。这段代码非常奇怪-例如,
new Car::CarType(new\u Car\u type)的唯一用途是创建内存泄漏。请尝试创建一个并显示给我们。包括“代码”(至少声明)的代码> CARVATION/CODE >。看来您仍在学习C++的基础知识。您可能需要抓住A来掌握基础知识。您应该在<代码> PUBSUBF()中拥有<代码>新< /代码>。
,而不是外部。您也可能有一个std::vector
,而不必担心指针。“一个更好的解决方案可能是在Car类中有一个枚举,用于说明Car的类型,”这是否更好还有争议。将原始指针存储在向量
中肯定不好,应该是std::vector
或std::vector
。我提到了智能指针的使用。在我们没有太多信息的情况下,很难给出具体的建议。
bool CarManagementSystem::addCar(Car::CarType new_car_type) {
Car *c;
switch (new_car_type) {
case AT_SUV:
c = new SUV; // if SUV would be a class derived from Car
break;
case AT_RACING_CAR:
...
case AT_INVALID:
default:
return false;
}
carVector.push_back(c);
return true;
}