为什么共享共享指针的推送会导致异常?

时间:2019-07-03 20:17:03

标签: c++

我试图通过使用指向对象的共享指针并将其传递给它们的构造函数,从而在多个类中共享对象的向量。我希望这是一个语法类型问题。

我曾尝试将智能指针传递并推入其中,但是在执行实际推入操作时出现只读异常错误。

主叫类:

auto sp1 = std::make_shared<std::vector<cl_order >>() ;
cl_myframeclass * c_frame = new cl_myframeclass(sp1,c_order, v_framed, c_framecustomize, c_vector);

类构造函数:

cl_myframeclass(std::shared_ptr<std::vector <cl_order>> atrans, cl_order * c_order,cl_framedisplay * a, cl_framecustomize * incustom, cl_vector *invector);

班上的私人矢量:

std::shared_ptr< std::vector<cl_order>> alltransactions;

在此构造函数中设置矢量:

auto alltransactions(atrans);

*抛出异常的实际推入函数:

alltransactions->push_back(c_temporder);

如前所述,推送发生时,我会收到一个只读异常。

编辑:我搞砸了,正确的类构造函数有点不同:

cl_myframeclass::cl_myframeclass(std::shared_ptr< std::vector > atrans, cl_order * c_order, cl_framedisplay * c_indisplay, cl_framecustomize * c_incustom, cl_vector * c_vector) : wxFrame(NULL, wxID_ANY, "Home")

那么这个如何初始化呢?

1 个答案:

答案 0 :(得分:3)

此行:

auto alltransactions(atrans);

声明一个名为alltransactions的新变量,其名称与您的成员相同。

您的构造函数应使用成员初始化列表,以确保正确初始化您的成员:

struct my_class {
    my_class(std::shared_ptr<std::vector<cl_order>> atrans) : transactions(atrans) {}

    std::shared_ptr<std::vector<cl_order>> transactions;
};