LINUX.ORG.RU

История изменений

Исправление lovesan, (текущая версия) :

C++ это язык, в котором никогда не перестаешь находить новые грабли.

Вот я недавно такое говно обнаружил. Внезапно! И это после многих лет использований крестов.

Вот возьмем класс

class Foo
{
public:
  Foo(const std::wstring& name, int x);

  Foo(const Foo&) = delete;
 
  Foo(Foo&&) = default;

  Foo& operator=(const Foo&) = delete;

  Foo& operator=(Foo&&) = default;

  ~Foo();

  void Start();

private:
  std::thread _thr;
  std::unique_ptr<int[]> _data;

  void ThreadFunc();
};

Понятно что примерно делает - что-то там грузит, и обрабатывает в отдельном треде. Тред естественно, при запуске, берет this.

Далее мы складываем это в vector и запускаем.

Вот при таком раскладе - у нас нихрена ничего не работает! Ну, в частности, падает, и так далее.

std::vector<Foo> v;

for(int i = 0; i<n; ++i)
{
  v.emplace_back(names[i], i);
  v[i].Start();
}

А вот так - работает.

std::vector<Foo> v;

for(int i = 0; i<n; ++i)
{
  v.emplace_back(names[i], i);
}

for(int i = 0; i<n; ++i)
{
  v[i].Start();
}

Крестанутые задроты, которые щас это объяснят - могут взять с полки пирожок.

Но факт такой, что этот язык - кривое говно, состоящее из граблей на пустом месте. Он отнимает энергию на грёблю с бессмысленным дрочиловом. В итоге, используя кресты, ты тратишь огромное количество времени не на решение задачи, а на дрочь вприсядку с крестами. В других языках такого не возникает.

Исправление lovesan, :

C++ это язык, в котором никогда не перестаешь находить новые грабли.

Вот я недавно такое говно обнаружил. Внезапно! И это после многих лет использований крестов.

Вот возьмем класс

class Worker
{
public:
  Foo(const std::wstring& name, int x);

  Foo(const Foo&) = delete;
 
  Foo(Foo&&) = default;

  Foo& operator=(const Foo&) = delete;

  Foo& operator=(Foo&&) = default;

  ~Foo();

  void Start();

private:
  std::thread _thr;
  std::unique_ptr<int[]> _data;

  void ThreadFunc();
};

Понятно что примерно делает - что-то там грузит, и обрабатывает в отдельном треде. Тред естественно, при запуске, берет this.

Далее мы складываем это в vector и запускаем.

Вот при таком раскладе - у нас нихрена ничего не работает! Ну, в частности, падает, и так далее.

std::vector<Foo> v;

for(int i = 0; i<n; ++i)
{
  v.emplace_back(names[i], i);
  v[i].Start();
}

А вот так - работает.

std::vector<Foo> v;

for(int i = 0; i<n; ++i)
{
  v.emplace_back(names[i], i);
}

for(int i = 0; i<n; ++i)
{
  v[i].Start();
}

Крестанутые задроты, которые щас это объяснят - могут взять с полки пирожок.

Но факт такой, что этот язык - кривое говно, состоящее из граблей на пустом месте. Он отнимает энергию на грёблю с бессмысленным дрочиловом. В итоге, используя кресты, ты тратишь огромное количество времени не на решение задачи, а на дрочь вприсядку с крестами. В других языках такого не возникает.

Исходная версия lovesan, :

C++ это язык, в котором никогда не перестаешь находить новые грабли.

Вот я недавно такое говно обнаружил. Внезапно! И это после многих лет использований крестов.

Вот возьмем класс

class Worker
{
public:
  Foo(int x);

  Foo(const Foo&) = delete;
 
  Foo(Foo&&) = default;

  Foo& operator=(const Foo&) = delete;

  Foo& operator=(Foo&&) = default;

  ~Foo();

  void Start();

private:
  std::thread _thr;
  std::unique_ptr<int[]> _data;

  void ThreadFunc();
};

Понятно что примерно делает - что-то там грузит, и обрабатывает в отдельном треде. Тред естественно, при запуске, берет this.

Далее мы складываем это в vector и запускаем.

Вот при таком раскладе - у нас нихрена ничего не работает! Ну, в частности, падает, и так далее.

std::vector<Foo> v;

for(int i = 0; i<n; ++i)
{
  v.emplace_back(n);
  v[i].Start();
}

А вот так - работает.

std::vector<Foo> v;

for(int i = 0; i<n; ++i)
{
  v.emplace_back(n);
}

for(int i = 0; i<n; ++i)
{
  v[i].Start();
}

Крестанутые задроты, которые щас это объяснят - могут взять с полки пирожок.

Но факт такой, что этот язык - кривое говно, состоящее из граблей на пустом месте. Он отнимает энергию на грёблю с бессмысленным дрочиловом. В итоге, используя кресты, ты тратишь огромное количество времени не на решение задачи, а на дрочь вприсядку с крестами. В других языках такого не возникает.