Π ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ Π‘++ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΈΡΠ°ΡΡ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊ:
ΠΠ±ΡΡΠ½ΠΎ ΡΠ°ΠΊ ΠΈ Ρ ΠΏΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π½Π° ΡΠ°Π±ΠΎΡΠ΅.
Π ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π²ΠΎΡ ΡΠ°ΠΊ, ΠΌΠ΅ΡΠΊΠΎ, ΠΏΡΠΎΡΠΈΠ²Π½ΠΎ, ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ:
std::for_each(threads.begin(), threads.end(), std::mem_fun_ref(&std::thread::join));ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΊΡΡΡΠΎ, ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ Π² Π±Π»ΠΈΠ·ΠΊΠΎΠΌ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΡΡΠΈΠ»Π΅ ΠΈ ΡΠΈΡΠ°Π΅ΡΡΡ ΡΡΠΎ ΠΊΠ°ΠΊ Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΡΠ·ΡΠΊ: Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΎΡ Π½Π°ΡΠ°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° Π²ΡΠ·ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ - ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ.
ΠΠ±ΡΡΠ½ΠΎ ΡΠ°ΠΊ ΠΈ Ρ ΠΏΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π½Π° ΡΠ°Π±ΠΎΡΠ΅.
Π ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π²ΠΎΡ ΡΠ°ΠΊ, ΠΌΠ΅ΡΠΊΠΎ, ΠΏΡΠΎΡΠΈΠ²Π½ΠΎ, ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ:
for(auto& t: threads)Π’Π°ΠΊ Ρ ΠΏΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π½Π° ΡΠ°Π±ΠΎΡΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡΠ΄Π°Π»ΠΈΠ» ΡΠΎΡ, ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π» ΡΠ½Π°ΡΠ°Π»Π°.
t.join();
ΠΠ° ΠΊΠ°ΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΠΈΡΠΈΡΠ΅ (Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ)?
Anonymous Poll
5%
C
16%
Π‘++
12%
Java
11%
JavaScript
26%
Python
11%
Go
3%
Scala
3%
Haskell
5%
PHP
9%
ΠΡΡΠ³ΠΎΠ΅, Π½Π°ΠΏΠΈΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°Ρ
Forwarded from Hermitage
RPCS3, ΡΠΌΡΠ»ΡΡΠΎΡ PlayStation 3 ΠΏΠΎΠ΄ PC (Windows/Linux), Π·Π΄ΠΎΡΠΎΠ²ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ β ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ ΡΠ°ΠΉΡΠ» Metal Gear Solid 4. ΠΠ³ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π½ΠΎ ΠΎΡΡΠ°Π»ΠΈΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±Π°Π³ΠΈ ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ. ΠΡΡΡ Π½Π°Π΄Π΅ΠΆΠ΄Π°, ΡΡΠΎ ΡΡΠΎ ΡΠ΅ΡΠ°Π΅ΠΌΡΠ΅ Π±Π°Π³ΠΈ ΡΠΌΡΠ»ΡΡΠΈΠΈ GPU ΠΈ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΡΡΡΠ°Π½Π΅Π½Ρ. ΠΠ°Π±Π°Π²Π½ΠΎ, Π½ΠΎ ΡΠΌΡΠ»ΡΡΠΎΡ ΡΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ½ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π² 30fps ΠΈ ΠΈΠ³ΡΠ°ΡΡ Π½Π° 60fps.
YouTube
RPCS3 - Metal Gear Solid 4 Ingame for the first time!
The promised day has finally arrived! Thanks to the recent improvement made by eladash, the coveted PlayStation exclusive title, Metal Gear Solid 4, now goes...
https://twitter.com/ericniebler/status/1167172402184216576
ΠΡΠΈΠΊ ΠΠΈΠ±Π»Π΅Ρ ΠΆΠ°ΡΠΈΡ Π²Π°ΡΠ΅ Π°Π΄ΠΎΠ²ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π°ΠΆ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΡΠΊΠ»Π΅ΠΈΠ²Π°Π΅ΡΡΡ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΡΠΎ 4.5 ΡΠ΅ΠΊΡΠ½Π΄Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ clang.
ΠΡΠΈΠΊ ΠΠΈΠ±Π»Π΅Ρ ΠΆΠ°ΡΠΈΡ Π²Π°ΡΠ΅ Π°Π΄ΠΎΠ²ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π°ΠΆ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΡΠΊΠ»Π΅ΠΈΠ²Π°Π΅ΡΡΡ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΡΠΎ 4.5 ΡΠ΅ΠΊΡΠ½Π΄Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ clang.
π¦ ΠΠΉΡΠΈ Π’ΡΠ΄ΡΠΉ π¦₯
https://twitter.com/ericniebler/status/1167172402184216576 ΠΡΠΈΠΊ ΠΠΈΠ±Π»Π΅Ρ ΠΆΠ°ΡΠΈΡ Π²Π°ΡΠ΅ Π°Π΄ΠΎΠ²ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π°ΠΆ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΡΠΊΠ»Π΅ΠΈΠ²Π°Π΅ΡΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΡΠΎ 4.5 ΡΠ΅ΠΊΡΠ½Π΄Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ clang.
ΠΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π·Π°ΡΠ²ΠΊΠ°ΠΌ
Π― ΡΠ΅ΠΉΡΠ°Ρ Π² ΡΠΎΠΊΠ΅, Π½ΠΎ ΡΠΆΠ΅ ΠΏΠΎΡΡΠΈ ΠΎΡΠΎΡΠ΅Π».
ΠΡΡΡΠ½ΠΈΠ»ΠΎΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π² Π‘++ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ°ΠΊ
Π§ΡΡΡ Π»Π΅Π³ΡΠ΅ ΠΌΠ½Π΅ ΡΡΠ°Π»ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½Π΅ ΡΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΡΡΠΎ Π½Π΅ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΡ.
Π― ΠΏΠ΅ΡΠ΅Π±ΡΠ°Π» ΠΊΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² ΠΈ Π²Π΅ΡΡΠΈΠΉ ΡΠ·ΡΠΊΠ° - ΠΌΠΎΠΆΠ½ΠΎ! Π’ΠΎΠ»ΡΠΊΠΎ clang 3.2 ΡΠ΄Π°Π»ΡΡ, Π° g++ Π½ΠΈΠΆΠ΅ 4.1.2 Π½Π΅ Π½Π°ΡΠ΅Π».
Π ΠΏΠΎΡΠΎΠΌ Ρ Π΄ΠΎΠ±ΡΠ°Π»ΡΡ Π΄ΠΎ msvc ΠΈ ΡΠ²ΠΈΠ΄Π΅Π» Π·Π°Π²Π΅ΡΠ½ΠΎΠ΅
ΠΡΡΡΠ½ΠΈΠ»ΠΎΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π² Π‘++ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ°ΠΊ
#include <iostream>Π’.Π΅. ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΡΡΠ΅ΠΊΠ΅! ΠΠΎΡ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ! Π Ρ ΠΊ ΠΠΠ Π³ΠΎΡΠΎΠ²ΠΈΠ»ΡΡ ΠΈ new/delete ΠΎΡΠ²Π°ΠΈΠ²Π°Π», ΡΡΠΎΠ±Ρ Π·Π°Π΄Π°ΡΠΊΠΈ Π·Π°ΠΊΠΎΠ΄ΠΈΡΡ ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ.
int main() {
size_t size;
std::cin >> size;
int array[size];
}
Π§ΡΡΡ Π»Π΅Π³ΡΠ΅ ΠΌΠ½Π΅ ΡΡΠ°Π»ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½Π΅ ΡΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΡΡΠΎ Π½Π΅ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΡ.
Π― ΠΏΠ΅ΡΠ΅Π±ΡΠ°Π» ΠΊΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² ΠΈ Π²Π΅ΡΡΠΈΠΉ ΡΠ·ΡΠΊΠ° - ΠΌΠΎΠΆΠ½ΠΎ! Π’ΠΎΠ»ΡΠΊΠΎ clang 3.2 ΡΠ΄Π°Π»ΡΡ, Π° g++ Π½ΠΈΠΆΠ΅ 4.1.2 Π½Π΅ Π½Π°ΡΠ΅Π».
Π ΠΏΠΎΡΠΎΠΌ Ρ Π΄ΠΎΠ±ΡΠ°Π»ΡΡ Π΄ΠΎ msvc ΠΈ ΡΠ²ΠΈΠ΄Π΅Π» Π·Π°Π²Π΅ΡΠ½ΠΎΠ΅
error C2131: expression did not evaluate to a constant
Π― Π΄ΠΎ 2018 Π³ΠΎΠ΄Π° ΡΠΎΠ»ΡΠΊΠΎ msvc ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΠΈ Π·Π½Π°ΡΡ Π½Π΅ Π·Π½Π°Π» ΠΊΠ°ΠΊΠ°Ρ ΠΆΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ. ΠΠ½Π΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΈΡΡ.Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π·Π°Π΄Π°ΡΠΊΠ° ΠΏΠΎ Π‘++, Π²ΠΎΠΏΡΠΎΡ ΠΏΡΠΎΡΡΠΎΠΉ - ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ? ΠΡΠ»ΠΈ Ρ
ΠΎΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΡΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΡΠΈΡΠ°ΠΉΡΠ΅ ΠΊΠΎΠ΄, Π²ΡΡΠΊΠ°Π·ΡΠ²Π°ΠΉΡΠ΅ΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
, Π° ΠΏΠΎΡΠΎΠΌ ΡΠΈΡΠ°ΠΉΡΠ΅ Π΄Π°Π»ΡΡΠ΅.
Π Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΡ: "ΠΠ΄Π΅ ΠΌΠΎΠ΅ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅, ΜΆΠΜΆΠ΅ΜΆΠ±ΜΆΠΎΜΆΠ²ΜΆΡΜΆΠΊΜΆΠΈΜΆ ?"
ΠΠ° ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠ΅Π·ΠΎΠ½Π½ΠΎΠ΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΎΡ ΠΏΡΠΈΠ²Π»Π΅ΡΠ΅Π½Π½ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² ΠΈΠ· ΠΊΡΡΠΏΠ½ΡΡ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ: "Π, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ? Π’Ρ Π² Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΏΠΎ ΡΠ°ΠΊΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ ΡΠΆΠ΅ ΠΌΠ΅ΡΡΠ² Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ".
ΠΠΎΡ ΡΠ°ΠΊΠΎΠΉ Π²ΠΎΡ ΡΠΏΠΎΡΠΎΠ± Π²ΡΡΡΡΠ΅Π»ΠΈΡΡ ΡΠ΅Π±Π΅ Π² Π½ΠΎΠ³Ρ Ρ Π΄Π²ΡΡ ΜΆΡΜΆΡΜΆΠΊΜΆ ΠΏΠΎΡΠΎΠΊΠΎΠ².
#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"; }
};
Π’.Π΅. ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΡΠ°Π·ΡΡΡΠ΅Π½ΠΈΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠ΅Π½ΡΠ»ΠΈΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· Π½ΠΈΡ
Π²Π΅Π·Π»ΠΎ, Π° Π²ΡΠΎΡΠΎΠΌΡ Π½Π΅ Π²Π΅Π·Π»ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π°.ΠΠΎΡ ΡΠ°ΠΊΠΎΠΉ Π²ΠΎΡ ΡΠΏΠΎΡΠΎΠ± Π²ΡΡΡΡΠ΅Π»ΠΈΡΡ ΡΠ΅Π±Π΅ Π² Π½ΠΎΠ³Ρ Ρ Π΄Π²ΡΡ ΜΆΡΜΆΡΜΆΠΊΜΆ ΠΏΠΎΡΠΎΠΊΠΎΠ².