У меня есть некоторый код, как следующее:C++ Нужен ли атомам массив атомных атомов?
KMessageQueue::KMessageQueue()
{
messages = new atomic<KBuffer*>[MAX_MESSAGES];
for (int i = 0; i < MAX_MESSAGES; i++)
messages[i].store(nullptr);
}
Где сообщения является членом KMessageQueue, определяется как:
std::atomic<KBuffer*>* messages;
Таким образом, каждый элемент массива сообщений является атомарным, и я прочитал их от другой поток. Но сам ли указатель массива также должен быть атомарным? Может ли другой поток попытаться получить доступ к сообщению после завершения конструктора, только чтобы обнаружить, что сообщения еще не получили значение?