C++ 分段错误:共享\u ptr
我在共享ptr中遇到一些奇怪的行为,我无法解释为什么会发生这种情况:C++ 分段错误:共享\u ptr,c++,segmentation-fault,shared-ptr,C++,Segmentation Fault,Shared Ptr,我在共享ptr中遇到一些奇怪的行为,我无法解释为什么会发生这种情况: std::shared_ptr<QueryQualification> qualification = query->getQualification(); if (qualification != nullptr) { // add selection std::shared_ptr<Operator> selection = std::shared_ptr<Operato
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);
...
}
std::shared_ptr qualification=query->getQualification();
if(资格!=空PTR){
//添加选择
std::shared_ptr selection=std::shared_ptr(新选择(资格));
选择->设置LeftChild(扫描);
...
}
下面是导致分段错误的选择构造函数:
class Selection : public Operator {
public:
Selection(std::shared_ptr<QueryQualification> qualificiation) : qualification(qualification) { }
...
private:
std::shared_ptr<QueryQualification> qualification;
};
类选择:公共运算符{
公众:
选择(标准::共享的资格):资格(资格){
...
私人:
std::共享ptr资格;
};
我知道,我可以在这里使用移动语义来改进复制行为,但我想先获得一些运行代码
上述代码在所选构造函数中引发分段错误:
SelectionOperator.hpp(第24行)是上述选择构造函数的代码行
我真的不明白这里发生了什么,因为在将限定对象作为参数提供给选择之前,它是完全有效的
提前谢谢 类选择:公共运算符{
class Selection : public Operator {
public:
Selection(std::shared_ptr<QueryQualification> qualification) : m_qualification(qualification) { }
...
private:
std::shared_ptr<QueryQualification> m_qualification;
};
公众:
选择(标准::共享认证):m认证(认证){
...
私人:
std::共享ptr m_资格;
};
此时查询是否为空?否,查询也有效。您可以看到这一点,因为std::shared_ptr qualification=query->getQualification();否则将导致分段错误。是的,make_shared(…)
可能比shared_ptr(new T(…)
更有效,因为它可以合并两个分配(以及相应的解除分配).表格中的拼写qualification
似乎有误constructor@davidc它可能会提高可读性,但不是必需的;在qualification(qualification)
中,第一个名称无疑是一个成员名称,第二个名称取自当前范围,其中参数名称隐藏了该成员。它仍然会做正确的事情,即使阅读起来很混乱。编辑:遗漏了拼写错误,当然这会导致问题。:)因为这个小错误不是错误发生的原因。