none
Проблемы с вектором атомарных указателей RRS feed

  • Общие обсуждения

  • Здравствуйте! У меня возникла проблема. Необходимо создать пустой вектор vector<atomic<void*>>, а уже во время работы программы определить размер вектора и инициализировать каждый атомарный указатель.

    Делаю так:

    vector<atomic<void*>> ClientsList; /* Реализация: */ int _tmain(int argc, _TCHAR* argv[]) { ClientsList.resize(1000);// Тут ошибка for (size_t i = 0; i < 1000; ++i) { atomic_init(&ClientsList[i], nullptr); } }

    Ошибка 1 error C2280: "std::atomic<void*>::atomic(const std::atomic<void*> &)": предпринята попытка ссылки на удаленную функцию D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xmemory0 593 1 Atomic Queue

    Не могу понять, в чем проблема. Помогите.



Все ответы

  • Здравствуйте. Возможно, конструктор копирования для шаблона atomic является закрытым, надо посмотреть реализацию. А, вообще, если Вы хотите задействовать контейнерный класс для "имитации" статического массива, лучше подойдёт array, а не vector.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

  • Наоборот - задача предполагает возможность изменения емкости в процессе работы. Просто для примера решил задать жестко размер. В данный момент пишу сервер с многопоточной неблокирующей обработкой списка клиентов. Размер списка может меняться по команде администратора. Необходимо определять (и переопределять) размер вектора атомарных указателей во время работы. Но, как я понял, atomic не позволяет вызывать свой конструктор копирования(?) Что с этим делать? ClientsList.reserve()/resize() вызывает ошибку.

  • Я не знаю, позволяет или нет. Перейдите по ссылке в тексте ошибки и посмотрите, какая видимость у конструктора копирования atomic.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

  • Конструктор копирования помечен, как удаленный. Не понимаю, почему возникает эта ошибка, ведь:

    ClientsList.resize(1000);

    ...должно наполнить пустой вектор 1000-ю элементами с вызовом для каждого конструктора по умолчанию (естественно, увеличив емкость).


    • Изменено MGNeo 18 мая 2016 г. 8:48 Опечатка