在指针向量c ++中存储新对象

Posted

技术标签:

【中文标题】在指针向量c ++中存储新对象【英文标题】:Storing new object in pointer vector c++ 【发布时间】:2020-08-17 16:19:11 【问题描述】:

使用以下代码,我需要将新对象存储在指针向量中。我已经完成了,但现在它不会显示有关循环中对象的任何信息(我在哪里通过向量)。在类 Tvrtka(公司)中,我有 Zaposlenik(工人)的指针向量。对于我存储的每个对象,它都会转到向量。

class Tvrtka
public:
    string oib;
    string naziv;
    string adresa;
    vector<const Zaposlenik*> zaposlenici;
    Tvrtka()
    Tvrtka(const string _oib, const string _naziv,const  string _adresa, vector<const Zaposlenik*> _z)

    
        this->oib=_oib;
        this->naziv=_naziv;
        this->adresa=_adresa;
        for(int i=0;_z.size();i++)
        
            zaposlenici.push_back(_z[i]);
        
    

主要部分:

vector<const Zaposlenik*>zaposlenici;

    Zaposlenik *z1=new Zaposlenik("Marko", "maric", 20);
    zaposlenici.push_back(z1);

    Tvrtka t1("198","Majur", "2222", zaposlenici);


        for(int i=0;i<zaposlenici.size();i++)
        


            cout<<zaposlenici[i]->ime;
        

如果我评论 t1(Tvrtka 的对象),它会显示有关工人的信息。

【问题讨论】:

请编辑您的问题以包含minimal reproducible example、预期行为以及您得到的结果。 Tvrtka ctor 中的注意循环是完全多余的,复制向量(或赋值)的 ctor 会导致完全相同的结果。 回滚,因为这个版本更接近完成(虽然没有完成) @MikeCAT 通过回滚你的回答无效:) @Slava 你是什么意思? 【参考方案1】:

在这个循环中

for(int i=0;_z.size();i++)

    zaposlenici.push_back(_z[i]);

_z.size() 用作循环条件,这与i 无关。 这意味着如果您将非空向量作为_z 传递,则循环将无限循环,并且将耗尽内存。

应该是

for(int i=0;i<_z.size();i++)

    zaposlenici.push_back(_z[i]);

或者干脆

for(auto& elem : _z)

    zaposlenici.push_back(elem);

【讨论】:

或者干脆zaposlenici = _z; 我的条件错误,tnx 伙计们。是我<_z> @Momo 这就是为什么最好不要编写冗余代码,这样可以减少出错的机会。

以上是关于在指针向量c ++中存储新对象的主要内容,如果未能解决你的问题,请参考以下文章

C ++从向量中删除指针会导致堆错误

C ++:在向量中插入啥 - 指针或引用,向量何时复制它的元素?

指向另一个类 c++ 中对象向量的指针

C ++在向量迭代中删除并返回指向对象的指针

C++ OOP,输出对象指针向量时的空白控制台,不确定填充向量是不是正确

如果存储在指针映射中,是不是需要删除对象?