я встречаю какое-то странное поведение с 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;
};
Я знаю, что я могу улучшить поведение копии с семантикой перемещения здесь, но сначала хочу получить код.
Код выше поднимает ошибку сегментации в конструктор выбора:
SelectionOperator.hpp (строка 24) в строку кода конструктора Selection выше.
Я действительно не понимаю, что здесь происходит, так как объект квалификации является совершенно действительным, прежде чем передать его в качестве аргумента.
Заранее благодарен!
Является ли запрос null на данном этапе? – BlamKiwi
Нет, запрос действительно. Вы можете видеть это, потому что std :: shared_ptr qualification = query-> getQualification(); в противном случае приведет к ошибке сегментации. –
moo
Что возвращает 'query-> GetQualification()' return? «Shared_ptr», «unique_ptr», владеющий raw-указателем, который вы должны «удалить», или не владеющий необработанным указателем? – Deduplicator