c++ - 使用类的 vector

标签 c++ pointers vector allocation copy-constructor

我是 C++ 的新手,我才刚刚开始使用称为类的容器。

我正在开发一个程序,其中定义了一个对象并将其存储在 vector 中。

程序如下,然后是我得到的错误的描述。

这是“car.h”

#ifndef CAR_H_GUARD
#define CAR_H_GUARD

class car{

    int v;//the velocity 
    int loc;//location

public:

    //default constructor, copy constr., cp. assgnmt. optr., destructor
    car();
    car(const car& j);
    car& operator=(const car& j);
    ~car();

    void set_v(int);    //sets velocity 
    void set_pos(int);  //sets position

    int get_v (){return((v));}//returns velocity
    int get_pos(){return(loc);}//returns position

};
#endif

这是“car.cpp”

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

using namespace std;

//constructor
car::car() {

    v=1;
    loc=0;

}

//copy constructor
car::car(const car& j){

    v=j.v;
    loc=j.loc;

}

//copy assignment operator

car& car::operator=(const car& j){

    v=j.v;
    loc=j.loc;

    return *this;

}

//destructor
car::~car () {

    delete &v;
    delete &loc;

}

//sets velocity
void car::set_v(int p){

    v = p;

}

//sets position
void car::set_pos(int l){

    loc = l;

}

我试图通过复制赋值运算符来创建“移动构造函数”。这是为了让以下涉及我的对象 vector 的代码起作用。

#include "main.h"
#include "car.h"
#include <iostream>
#include <vector>

using namespace std;

//update car position
void update (vector <car> &cr){

    //changes state of cars, eg.
    for (int c = 0; c<cr.size();c++){
        cr[c].set_v(1);
        cr[c].set_pos(100);
    }

}

int main(){

    //a vector of cars
    vector<car> cat;

    car j;
    j.set_v(100);
    j.set_pos(99);
    cat.push_back(j);

    //new cars enters the road
    j.set_v(120);
    j.set_pos(77);
    cat.push_back(j);

    j.set_v(80);
    j.set_pos(55);
    cat.push_back(j);

    //updating cars
    update(cat);

    //output
    for (int i = 0; i<cat.size(); i++){

        cout << cat[i].get_v()<<" is the velocity of car "<<i<<".\n";
        cout << cat[i].get_pos()<<" is the position of car "<<i<<".\n";

    }
}

然后我在 Internetz 上查找了以下错误。

main(8852) malloc: * * * 对象 0x7fff5fbff630 错误:未分配正在释放的指针 * * * 在malloc_error_break设置断点调试 中止陷阱

虽然这可能是编译器不兼容(我用 Xcode 编写...并在 mac 10.6.8 上使用 g++ ...),但是当 vector 中只有一辆车时,代码确实会给出输出。当我尝试介绍其他汽车时,我只收到 malloc 错误。我想知道我是否遗漏了类定义的某些内容,或者我以某种方式搞砸了数据类型或指针引用。如果我尝试使用更新函数非平凡地操作它,输出的值也会有问题。

我什至尝试将一个指针 vector (指向类)传递给更新函数;我仍然无法将新元素插入 vector 中。这个站点对帮助我学习类结构及其指针很有帮助。

感谢阅读这么长的问题。

最佳答案

只有在用过new 的地方才用delete。您从不 删除 未由new 单独分配的内容。 Car 析构函数中的这些行是......非常具有破坏性(请原谅我的双关语):

delete &v;
delete &loc;

删除这些行——它们完全没有必要,它们是问题的根源。几乎唯一一次在析构函数中使用 delete 是在您使用 new 在构造函数中分配一个对象时——或者当一个指针指向——对象被传递给你的构造函数,理解你的对象负责在你的对象被破坏时删除指针。

关于c++ - 使用类的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770287/

相关文章:

c++ - gluLookAt() 没有按预期工作

c++ - 读取和写入进程 I/O?

c++ - 打印出指针列表

c++ - 指向 POD 结构的 C/C++ 指针也指向第一个结构成员

c++ - 函数 std::make_shared<vector> 的参数太多

c++ - List vs Vector,在循环时删除一个元素

c++ - 退出 while 循环,cin。使用 ctrl-Z/ctrl-D 不工作 c++

c++ - _ptr 或 _var - 哪个用作类字段,为什么?

c - 通过引用传递字符串数组以在 C 中运行和修改内容

c++ - 具有 vector vector 的多种数据类型