我遇到了一些与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的构造函数中引发了一个分段错误:
SelectionOperator.hpp(第24行)是上面Selection构造函数的代码行。
我真的不明白这里发生了什么,因为在将选择作为参数之前,资格对象是完全有效的。
提前致谢!
答案 0 :(得分:-1)
class Selection : public Operator {
public:
Selection(std::shared_ptr<QueryQualification> qualification) : m_qualification(qualification) { }
...
private:
std::shared_ptr<QueryQualification> m_qualification;
};