分段错误:shared_ptr

时间:2014-10-31 21:27:56

标签: c++ segmentation-fault shared-ptr

我遇到了一些与shared_ptr有关的奇怪行为,我无法解释为什么会发生这种情况:

std::shared_ptr<QueryQualification> qualification = query->getQualification();
if (qualification != nullptr) {
    // add selection
    std::shared_ptr<Operator> selection = std::shared_ptr<Operator>(new Selection(qualification));
    selection->setLeftChild(scan);
    ...
}

这是选择的构造函数,它导致分段错误:

class Selection : public Operator {
public:
   Selection(std::shared_ptr<QueryQualification> qualificiation) : qualification(qualification) { }
...
private:
   std::shared_ptr<QueryQualification> qualification;
};

我知道,我可以通过移动语义改进复制行为,但我想先得到一些正在运行的代码。

上面的代码在Selection的构造函数中引发了一个分段错误: The backtrace of the error

SelectionOperator.hpp(第24行)是上面Selection构造函数的代码行。

我真的不明白这里发生了什么,因为在将选择作为参数之前,资格对象是完全有效的。

提前致谢!

1 个答案:

答案 0 :(得分:-1)

class Selection : public Operator {
public:
   Selection(std::shared_ptr<QueryQualification> qualification) : m_qualification(qualification) { }
...
private:
   std::shared_ptr<QueryQualification> m_qualification;
};