Ошибки, баги, вопросы - страница 2199

 
Комбинатор:

обычно временные объекты удаляются не сразу, а в конце контекста. в С++ если не ошибаюсь это прямо в стандарте прописано.

хотите быстрого удаления - управляйте контекстом.

Правда придется сделать оператор =

Спасибо! В СД сообщили, что планируют исправить текущее поведение, но по срокам не определено.

 

Цветные линии (уровни) при предпросмотре (не печатал, но вероятно и на печати так) графика для печати в ЧБ.


 

Терминал Билд 1795

Windows 7 64


Если начать оптимизацию, а потом прервать ее спустя 30 минут, то терминал зависает, и его никак не остановить.

В диспетчере задач плодятся агенты MetaTester64(8шт).

После этого запустить терминал не удается. Надо ждать или перегружать компьютер. 


у Всех так? 

Запуск платформы - Для продвинутых пользователей - MetaTrader 5
Запуск платформы - Для продвинутых пользователей - MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Что снова с форумом? Начался день и начались нереальные тормоза. Страницы грузятся то быстро, то в течении секунд 30.
 
Vladimir Karputov:
Что снова с форумом? Начался день и начались нереальные тормоза. Страницы грузятся то быстро, то в течении секунд 30.
ркн, наверное... с пушами наблюдается проблемы на др сервисах.. вроде как телеграм работает через них..
 
Ошибка компилятора
class A
{
public:
  int i;
  
  void f() const
  {
    A* Tmp = true ? &this : &this; // no problem - BUG!
//    A* Tmp = &this; // '=' - cannot convert from const pointer to nonconst pointer
    
    Tmp.i = 4;
  }
};

void OnStart()
{
  const A a;
  
  a.f();
  
  Print(a.i); // 4
}
 
Ilnur Khasanov:
ркн, наверное... с пушами наблюдается проблемы на др сервисах.. вроде как телеграм работает через них..

Нахожусь вне России, сайт все равно иногда подвисает. Но у меня так не один месяц. Привык.

 
fxsaber:

Спасибо! Получается, что return объекта и "=" при определении объекта идут через доп. конструктор.

Хотелось бы на самом деле наглядную таблицу где-то посмотреть, в каких случаях идут вызовы конструкторов (и каких), а в каких - операторов. Сейчас все на уровне интуиции, а она сбоит, конечно.

Вы лучше не очень то расчитывайте на какие-то конкретные правила, компиляторам разрешено весьма вольно оптимизировать такие вещи (rvo, nrvo, copy elision, может ещё какие оптимизации спокойно вырежут лишнее). Копирующий конструктор и оператор "равно" должны делать одни и те же действия (не нужно закладывать в них разное поведение). Есть один хороший подход, называется "copy-and-swap idiom", если позволяет английский, то тут детально описано https://stackoverflow.com/questioncopy-and-swap idioms/3279543/what-is-the-copy-and-swap-idiom.
Если коротко, то пишется одна swap  функция, которая используется во всех конструкторах и операторах (мы уменьшаем количество кода, и получаем одинаковое поведение в результате чего не паримся о том, что там компилятор вызовет, вырежет, заоптимизирует).

dumb_array& operator=(dumb_array other)
{
    swap(*this, other);
    return *this;
}
dumb_array (dumb_array &&other)
{//this должен быть в валидном состоянии
    swap(*this, other);
}
dumb_array& operator=(dumb_array &&other)
{
    swap(*this, other);
    return *this;
}

"Выделенные строки вызывают вопросы. Почему временные объекты не грохнулись сразу, как были использованы? Т.е. до вывода тридцати. " 

Правильно вызывают вопросы, думаю. Временные объекты должны были разрушиться после двоеточия.

ЗЫ: я там код немного подправил, т.к. копирующий конструктор (не перемещающий) нужен в любом случае. Для мкл выгода не столь очевидна из-за отсутствия rvalue ссылок.
What is the copy-and-swap idiom?
What is the copy-and-swap idiom?
  • stackoverflow.com
What is this idiom and when should it be used? Which problems does it solve? Does the idiom change when C++11 is used? Although it's been mentioned in many places, we didn't have any singular "what is it" question and answer, so here it is. Here is a partial list of places where it was previously mentioned:
 
pavlick_:

Вы лучше не очень то расчитывайте на какие-то конкретные правила, компиляторам разрешено весьма вольно оптимизировать такие вещи (rvo, nrvo, copy elision, может ещё какие оптимизации спокойно вырежут лишнее). Копирующий конструктор и оператор "равно" должны делать одни и те же действия (не нужно закладывать в них разное поведение). Есть один хороший подход, называется "copy-and-swap idiom", если позволяет английский, то тут детально описано https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom.
Если коротко, то пишется одна swap  функция, которая используется во всех конструкторах и операторах (мы уменьшаем количество кода, и получаем одинаковое поведение в результате чего не паримся о том, что там компилятор вызовет, вырежет, заоптимизирует).

"Выделенные строки вызывают вопросы. Почему временные объекты не грохнулись сразу, как были использованы? Т.е. до вывода тридцати. " 

Правильно вызывают вопросы, думаю. Временные объекты должны были разрушиться после двоеточия.

Спасибо, в СД уже предупредили о планах по RVO.

 
Почему скрипт ничего не выводит?
class A
{
public:
  A() {}
  
  template <typename T>
  void operator =( T& )
  {
    Print(__FUNCSIG__);
  }

  template <typename T>
  A( T& )
  {
    Print(__FUNCSIG__);
  }
};

A* f()
{
  return(new A);
}

void OnStart()
{
  A* a = f();
  
  A* b;
  b = f();
  
  delete a;
  delete b;
}
Причина обращения: