Неправильный вызов конструктора вызывает ошибку сегментацииC++

Программы на C++. Форум разработчиков
Anonymous
Неправильный вызов конструктора вызывает ошибку сегментации

Сообщение Anonymous »

У меня есть два класса, которые независимо объявлены в их собственном заголовке, а их методы определены в их собственных TU/.cpp.
классы одинаковы по имени и пространству имен. мудро, но существуют в разных каталогах базы кода и имеют разные функциональные возможности, они выглядят следующим образом:
core1/abc1.h:

Код: Выделить всё

namespace ns {
class abc {
....
std::map m;
};
}

core1/abc1.cpp:

Код: Выделить всё

    namespace ns {
abc:~abc() {

};
}

core2/abc2.h:

Код: Выделить всё

namespace ns {
class abc {

std::unordered_map m;
};
}

core1/abc2.cpp:

Код: Выделить всё

namespace ns {
abc:~abc() {

};
}
Когда я запускаю свою программу, которая использует оба класса, когда программа завершается и вызываются деструкторы, кажется, что она основана на gdb для экземпляра, который имеет тип, полученный из abc2.h, вызывается деструктор для типа abc1.h, что затем вызывает ошибку сегмента.
Я вижу ошибку при использовании g++ и clang, мог бы это проблема с неопределенным поведением? или потенциально ошибка компоновщика? (линкер — золотой)

при создании имя символа для использования с компоновщиком принимается во внимание имя файла - или только пространство имен, класс, имена методов являются единственными факторами, принимаемыми во внимание?

Подробнее здесь: https://stackoverflow.com/questions/791 ... tion-fault

Вернуться в «C++»