История изменений
Исправление 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();
}
Крестанутые задроты, которые щас это объяснят - могут взять с полки пирожок.
Но факт такой, что этот язык - кривое говно, состоящее из граблей на пустом месте. Он отнимает энергию на грёблю с бессмысленным дрочиловом. В итоге, используя кресты, ты тратишь огромное количество времени не на решение задачи, а на дрочь вприсядку с крестами. В других языках такого не возникает.