C++ std::vector<std::shared_ptr>

C++ std::vector<std::shared_ptr>

本文关键字:std ptr gt lt vector C++ shared      更新时间:2023-10-16

我对shared_ptrS的向量有问题。我的代码是:

//--------scoala.h--------
class Scoala
{
public:
    Scoala(std::string );
    int adaugaElev(std::shared_ptr<Elev> elev);
private:
    std::vector<std::shared_ptr <Elev>> __elevi;
};

//-----------scoala.cpp-----------------------------
int Scoala::adaugaElev(std::shared_ptr<Elev> elev)
{
    __elevi.push_back(elev);
    return __elevi.size() - 1;
}

我运行了它,得到了"elev.exe中0x0137b559处未处理的异常:0xC0000005:读取位置0xcccccd0c的访问冲突"。怎么了?

传递到adaugaElev的elev对象很可能没有分配,或者以某种方式未分配(引用计数在shared_ptr中为零)-您需要发布更多代码来显示如何分配elev对象以确认这一点。

在valgrind下运行程序-这将有助于阐明问题所在。

在C++中,使用双下划线前缀的名称是未定义的行为。此外,埃列夫可能因各种原因被捕,我想追溯一下它的起源。