Сегодня задачка по С++, вопрос простой - что не так? Если хочется подумать самостоятельно, то сначала прочитайте код, высказывайтесь в комментариях, а потом читайте дальше.
И я интересуюсь: "Где мое позднее связывание, ̶Л̶е̶б̶о̶в̶с̶к̶и̶ ?"
На что получаю резонное замечание от привлеченных специалистов из крупных международных компаний: "А, собственно, почему оно должно работать? Ты в деструкторе по факту вызываешь виртуальную функцию, наследник уже мертв в этот момент".
Вот такой вот способ выстрелить себе в ногу с двух ̶р̶у̶к̶ потоков.
#include <iostream>Собираем
#include <memory>
#include <thread>
class Base{
public:
virtual ~Base() {
thread.join();
}
void proc() {
thread = std::thread(&Base::foo, this);
}
virtual void foo() {
std::cout << bar() << std::endl;
}
virtual std::string bar() = 0;
std::thread thread;
};
class Child : public Base
{
public:
std::string bar() override { return "Child"; }
};
class Derived : public Base
{
public:
std::string bar() override { return "Derived"; }
};
int main()
{
auto c = std::make_unique<Child>();
auto d = std::make_unique<Derived>();
c->proc();
d->proc();
}
g++ -O3 -pthread main.cpp и программа падает на вызове чисто виртуальной функции. Наша редакция прибегла к помощи специалистов и путем нехитрых манипуляций внесла изменения в кодvirtual std::string bar() { return "Base"; };
Теперь вывод, казалось бы, должен быть очевиден, но нет:DerivedПеребрав несколько компиляторов и окружений, все таки стало понятно, что бывает и ожидаемый вариант
Base
Base
Base
И я интересуюсь: "Где мое позднее связывание, ̶Л̶е̶б̶о̶в̶с̶к̶и̶ ?"
На что получаю резонное замечание от привлеченных специалистов из крупных международных компаний: "А, собственно, почему оно должно работать? Ты в деструкторе по факту вызываешь виртуальную функцию, наследник уже мертв в этот момент".
class Base{
public:
virtual ~Base() = default;
void wait() { thread.join(); }
...
};
class Child : public Base
{
public:
~Child() { wait(); }
std::string bar() override { return "Child"; }
};
class Derived : public Base
{
public:
~Derived() { wait(); }
std::string bar() override { return "Derived"; }
};
Т.е. по мере разрушения у объектов менялись таблицы виртуальных функций и иногда одному из них везло, а второму не везло никогда.Вот такой вот способ выстрелить себе в ногу с двух ̶р̶у̶к̶ потоков.
🦖 Айти Тудэй 🦥
Сегодня задачка по С++, вопрос простой - что не так? Если хочется подумать самостоятельно, то сначала прочитайте код, высказывайтесь в комментариях, а потом читайте дальше. #include <iostream> #include <memory> #include <thread> class Base{ public: virtual…
Поступило сразу несколько вопросов, а с прода ли этот код? Так вот нет, потому что я сначала написал тесты :)
Технодемка движка Luminos Engine, все, что вы видите - отрендерено с помощью трассировки лучей на одной RTX 2080Ti. Покажи мне такое в 2012 - я бы охуел.
https://www.youtube.com/watch?v=kohEL3Wo6a8
https://www.youtube.com/watch?v=kohEL3Wo6a8
YouTube
“Back Stage” Ray Tracing Tech Demo - Created By Luminous Productions
Luminous Productions, in partnership with NVIDIA, has created a new Luminous Engine tech demo powered by a single GeForce RTX 2080 Ti, that runs in real-time with full path-traced ray tracing.
More on Luminous Productions' tech demo: https://www.nvidia.com/en…
More on Luminous Productions' tech demo: https://www.nvidia.com/en…
💋1
Forwarded from iggisv9t channel
Написал статью, как делать странные картинки из больших графов.
https://habr.com/ru/company/ods/blog/464715/
https://habr.com/ru/company/ods/blog/464715/
Хабр
Визуализация больших графов для самых маленьких
Что делать, если вам нужно нарисовать граф, но попавшиеся под руку инструменты рисуют какой-то комок волос или вовсе пожирают всю оперативную память и вешают систему? За последние пару лет работы с...
iggisv9t channel
Написал статью, как делать странные картинки из больших графов. https://habr.com/ru/company/ods/blog/464715/
Солидно, посмотрите как минимум ради красивых картинок
Это очень сложный прекол, я вот сначала не понял, потому что футбол - не мое. А потом мне объяснили и я как понял!
Так вот: правило пяти и Эмманюэль Пети. Теперь у вас достаточно знаний, чтобы оценить шутку по достоинству!
Так вот: правило пяти и Эмманюэль Пети. Теперь у вас достаточно знаний, чтобы оценить шутку по достоинству!
Я всегда держу руку на пульсе, но не мира функционального программирования в целом и скалы в частности.
Разрослась драма вокруг Джона Де Гуза, которого выпиздили и оттуда, и отсюда. Я, конечно, полистал твиттер, нихуя не понятно, но очень интересно и поэтому у меня несколько вопросов.
Кто такой? Чем знаменит? Что послужило причиной драмы? И почему иммено такие решения были приняты? Эксперты, которые знают с какого твита читать или способные рассказать своими словами - добро пожаловать в комментарии!
Разрослась драма вокруг Джона Де Гуза, которого выпиздили и оттуда, и отсюда. Я, конечно, полистал твиттер, нихуя не понятно, но очень интересно и поэтому у меня несколько вопросов.
Кто такой? Чем знаменит? Что послужило причиной драмы? И почему иммено такие решения были приняты? Эксперты, которые знают с какого твита читать или способные рассказать своими словами - добро пожаловать в комментарии!
Twitter
#supportjohndegoes - Twitter Search
The latest Tweets on #supportjohndegoes. Read what people are saying and join the conversation.
Давайте разбавим ленту гик хобби. Вчера был мой день рождения и мне подарили настольный Дум с 37 (блять!!!!!) фигурками. Это охуенно, но...
...это пизда, ведь мне придётся научиться их красить. Кто нибудь красит фигурки? Как дальше жить? Какие у вас хобби бьющие по семейному бюджету? Реквестирую советы по сохранению семьи на этой почве!
...это пизда, ведь мне придётся научиться их красить. Кто нибудь красит фигурки? Как дальше жить? Какие у вас хобби бьющие по семейному бюджету? Реквестирую советы по сохранению семьи на этой почве!
На этой неделе в jsunderhood не про дикпики, а про wasm. Вот вам очень оскорбительный твит и довольно интересный тред, например.