У меня есть класс с несколькими атрибутами, как показано ниже, моя проблема в том, что когда я удаляю или помещаю атрибут string s
перед std::atomic<char*> atomic_input
, программа завершается с исключением:
'std :: logic_error '
what (): basic_string :: _ M_construct null недопустимо
Прервано (сброшено ядро)
#include <string>
#include <atomic>
// In ui.cpp
class UI
{
private:
std::atomic<char*> atomic_input;
std::string s; /* this can be renamed, but removing or placing it
before the above field crashes the program */
};
// In main.cpp
#include "ui.cpp"
int main()
{
srand (time(NULL));
initscr(); /* start the curses mode */
UI* ui = new UI();
return 0;
}
Строковый атрибут: не доступ к программе любым способом, переименование возможно.Причина, по которой у меня есть поле atomic
, заключается в том, что значение распределяется между несколькими потоками.
Я попытался поместить поле string
в разные строки в атрибутах класса, программа вылетает, только если объявление перед atomic_input
.
Чтоможет быть причиной проблемы?Это как-то связано с тем, как должны быть определены классы в C ++?