Tag: c ++ 11

Разница между std :: reference_wrapper и простым указателем?

Зачем нужна std::reference_wrapper ? Где его использовать? Как это отличается от простого указателя? Как его производительность сравнивается с простым указателем?

Шаблонный набор – вызов функции для каждого элемента

Мой вопрос находится в коде: template struct TupleOfVectors { std::tuple<std::vector…> tuple; void do_something_to_each_vec() { //Question: I want to do this: // “for each (N)”: do_something_to_vec() //How? } template void do_something_to_vec() { auto &vec = std::get(tuple); //do something to vec } };

Передача shared_ptr как shared_ptr

Каков наилучший способ shared_ptr производного типа на функцию, которая использует shared_ptr базового типа? Обычно я shared_ptr s ссылкой, чтобы избежать ненужной копии: int foo(const shared_ptr& ptr); но это не сработает, если я попытаюсь сделать что-то вроде int foo(const shared_ptr& ptr); … shared_ptr bar = make_shared(); foo(bar); Я мог бы использовать foo(dynamic_pointer_cast(bar)); но это кажется субоптимальным […]

Double-Checked Lock Singleton в C ++ 11

Является ли следующая версия данных о внедрении singleton уникальной? static std::atomic m_instance; … static Tp & instance() { if (!m_instance.load(std::memory_order_relaxed)) { std::lock_guard lock(m_mutex); if (!m_instance.load(std::memory_order_acquire)) { Tp * i = new Tp; m_instance.store(i, std::memory_order_release); } } return * m_instance.load(std::memory_order_relaxed); } Является ли std::memory_model_acquire операции загрузки лишней? Возможно ли дальнейшее ослабление операций загрузки и хранения путем […]

В чем разница между пустым и нулевым std :: shared_ptr в C ++?

Страница cplusplus.com shared_ptr вызывает различие между пустым std::shared_ptr и null shared_ptr . На странице cppreference.com явно не указано различие, но используется как «пустое», так и сравнение с nullptr в описании поведения std::shared_ptr . Есть ли разница между пустым и null shared_ptr ? Есть ли какой-либо прецедент для таких указателей со смешанным поведением? Имеет ли смысл […]

C ++ 11: Замените все необработанные указатели на std :: shared_ptr ()?

С появлением std::unique_ptr поврежденный std::auto_ptr наконец, может быть остановлен. Поэтому в течение последних нескольких дней я менял свой код на использование интеллектуальных указателей и delete все delete из своего кода. Хотя valgrind говорит, что мой код чист в памяти, семантическое богатство умных указателей сделает более чистый и понятный код. В большинстве кода перевод прост: используйте […]

Почему auto_ptr устарел?

Я слышал, что auto_ptr устарел в C ++ 11. Что является причиной этого? Также я хотел бы узнать разницу между auto_ptr и shared_ptr .

Должны ли все / большинство функций setter в C ++ 11 записываться как шаблоны функций, принимающие универсальные ссылки?

Рассмотрим class X с N переменными-членами, каждый из которых является подвижным и подвижным , и N соответствующими функциями сеттера. В C ++ 98 определение X , вероятно, будет выглядеть примерно так: class X { public: void set_a(A const& a) { _a = a; } void set_b(B const& b) { _b = b; } … private: […]

Как я могу ввести указатель на функцию с синтаксисом C ++ 11?

Я хотел бы написать это typedef void (*FunctionPtr)(); используя using . Как мне это сделать?

Какова цель ключевого слова «final» в C ++ 11 для функций?

Какова цель final ключевого слова в C ++ 11 для функций? Я понимаю, что это предотвращает переопределение функций производными classами, но если это так, то разве это не достаточно, чтобы объявить как не виртуальные ваши final функции? Есть ли еще одна вещь, которую я здесь не хватает?

Давайте будем гением компьютера.