ΠΡΠ»ΠΈ ΠΊΠ»Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π»ΡΠ±ΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΈΡΡ Π²ΡΠ΅ ΡΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΠΈΠΏΠ° ΡΡΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° β ΠΎΠ±ΡΡΠ½ΡΠΉ new, ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΠΈΠΉ ΠΈ Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΠΈΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. ΠΡΠ»ΠΈ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΠΎ ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΎΠΊΠ°ΠΆΡΡΡΡ ΡΠΊΡΡΡΡΠΌΠΈ ΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΠ±ΡΡΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ new ΠΈ delete Π½ΡΠΆΠ½Ρ ΠΎΡΠ΅Π½Ρ ΡΠ΅Π΄ΠΊΠΎ, Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π²ΡΠ΅ ΠΆΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ, ΡΠΎ Π²ΡΡΠ΄ Π»ΠΈ Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΡΠΊΡΡΠ²Π°Π»ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠΈΠ³Π½Π°ΡΡΡΡ.
Π Π‘++, ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΠΈΠΌΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΊΠ»Π°ΡΡΠ°), Π²ΡΠ΅ ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π° Π² ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡΠΈΡ ΠΎΠ±Π»Π°ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΠΊΠ°ΠΆΡΡΡΡ ΡΠΊΡΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠ°Ρ ΠΈΠ»ΠΈ ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ ΠΈΠΌΠ΅Π½), ΡΠ°ΠΊ ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· Π³ΡΠ°Π½ΠΈΡΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠΎΠ³Π΄Π° ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠΌ ΠΈ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΡΠ»ΠΎΠΆΠ½ΡΡΡ ΠΆΠΈΠ·Π½Ρ ΡΠ΅Π±Π΅ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
ΠΡΡΡΡ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ new, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΉ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ°:
class Π‘ {
// ...
// Π‘ΠΊΡΡΠ²Π°Π΅Ρ ΡΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π²ΠΈΠ΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new
static void* operator new(size_t, MemoryPool&);
};
Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ new Π‘, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΎΠΎΠ±ΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Π½Π΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π½Π°ΠΉΡΠΈ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΡΠ°ΡΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ new. ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ C::operator new Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΠΈΠΏΠ° MemoryPool ΡΠΊΡΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ Π·Π½Π°ΠΊΠΎΠΌΡΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ΅ ΠΌΡ Π·Π½Π°Π΅ΠΌ ΠΈ Π»ΡΠ±ΠΈΠΌ:
void* operator new(std::size_t); // ΠΠ±ΡΡΠ½ΡΠΉ
void* operator new(std::size_t,
std::nothrow_t) throw(); // He Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΠΈΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
void* operator new(std::size_t,
void*); // Π Π°Π·ΠΌΠ΅ΡΠ°ΡΡΠΈΠΉ
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΡΠΎΠ±ΡΡΠΈΠΉ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π²Π°Ρ ΠΊΠ»Π°ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΡ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π²Π΅ΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new β ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΡΠ΅Ρ . Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΡΠΎΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π΄Π²Π΅ Π²Π΅ΡΡΠΈΠΈ:
class Π‘ {
// ...
// Π‘ΠΊΡΡΠ²Π°Π΅Ρ Π΄Π²Π΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new
static void* operator new(size_t, void*);
};
ΠΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ Ρ ΠΊΠ»Π°ΡΡΠ° Π‘ Π² Π΅Π³ΠΎ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π±ΡΠ»ΠΈ ΡΠ²Π½ΠΎ Π²Π½Π΅ΡΠ΅Π½Ρ Π²ΡΠ΅ ΡΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new. ΠΠ±ΡΡΠ½ΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ. (ΠΠΈΠ΄ΠΈΠΌΠΎΡΡΡ Π΄Π»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π²Π΅ΡΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½Π° Π·Π°ΠΊΡΡΡΠΎΠΉ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ²Π½ΠΎ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ΅Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ β Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎΠ±Ρ Π²Ρ Π½Π΅ ΡΠΊΡΡΠ»ΠΈ ΡΡΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π΅ΠΏΡΠ΅Π΄Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ.)
ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ΅Π³Π΄Π° ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΡΠΎΠΊΡΡΡΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΠ΅Π³ΠΎ new, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΡΠ΅, ΡΡΠΎ ΠΎΡΡΠ°Π»ΠΎΡΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, β ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π²Π½Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new Π² ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π΄Π²ΡΠΌΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ Π² Π΄Π²ΡΡ ΡΠ°Π·Π½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ . ΠΡΠ»ΠΈ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ new, Π²ΡΠ΅, ΡΡΠΎ Π²Π°ΠΌ Π½Π°Π΄ΠΎ, β "ΡΠ°ΡΠΊΡΡΡΡ" ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ new:
class Π‘ : public B { // ...
public:
using B::operator new;
};
Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅ΡΡΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ Π² Π½Π΅ΠΌ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ new, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΡΠΎΡΠΊΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ»Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ using Π΄Π»Ρ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ ΠΈΠ· Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ):
class C { // ...
public:
static void* operator new(std::size_t s) {
return ::operator new(s);
}
static void* operator new(std::size_t s,
std::nothrow_t nt) throw() {
return ::operator new(s, nt);
}
static void* operator new(std::size_t s, void* p) {
return ::operator new(s, p);
}
};
Π Π°ΡΡΠΌΠΎΡΡΠ΅Π½Π½Π°Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΡΠ°ΠΊΠΆΠ΅ ΠΊ Π²Π΅ΡΡΠΈΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² β operator new[].
ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ Π²ΡΠ·ΠΎΠ²Π° Π²Π΅ΡΡΠΈΠΈ new(nothrow) Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅, Π½ΠΎ ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΡΡΠ΅ ΠΈ Π΅Π΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π½Π΅ ΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎ ΡΠ΄ΠΈΠ²Π»Π΅Π½Ρ.
Π‘ΡΡΠ»ΠΊΠΈ[Dewhurst03] Β§60 β’ [Sutter04] Β§22-23
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ, Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΡ ΠΈ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΠ»ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡ ΠΏΡΠΈΠ²Π΅Π» Π²Π°Ρ ΠΊ ΠΎΠ±ΡΡΠ²Ρ, ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΡΠ³Π½ΡΡΡ Ρ Π½Π΅Π³ΠΎ.
β ΠΠΎΡΠΌΠ°Π½ ΠΠ°ΠΉΠΌΠΎΠ½Π΄ (Norman Diamond)Π ΠΠΎΠ»ΡΡΠΎΠΉ Π§Π΅ΡΠ²Π΅ΡΠΊΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π²Ρ Π½Π΅ ΡΠ΄ΠΈΠ²Π»ΡΠ»ΠΈΡΡ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΈΠΌ ΠΏΠΎΡΠ²ΡΡΠ΅Π½ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ°Π·Π΄Π΅Π». ΠΠ΄Π΅ΡΡ ΡΠΎΠ±ΡΠ°Π½Ρ Π·Π½Π°Π½ΠΈΡ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΊΠΎΠΏΠΈΡΡΡΡΠΈΠΌΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌΠΈ, ΠΊΠΎΠΏΠΈΡΡΡΡΠΈΠΌ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌΠΈ.
ΠΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π±ΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π΄Π°Π΄ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Ρ ΠΎΡΡ Π±Ρ ΠΏΠΎΠ»ΡΠ°Π½ΡΠ° β ΠΎΠ½ ΡΡΡ ΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ΅Ρ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° Π²Π°Ρ. ΠΡΠ΅ ΠΎΠ΄Π½Π° ΠΏΡΠΈΡΠΈΠ½Π° ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π‘++ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΊΠ»Π°ΡΡΡ ΠΊΠ°ΠΊ ΡΠΈΠΏΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½ΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅ ΡΠΈΠΏΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠΎΠ²Ρ (ΡΠΌ. ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ 32). ΠΠ°Π΄ΠΎ ΠΎΡΡΠ΅ΡΠ»ΠΈΠ²ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ (ΠΈΠ»ΠΈ Π·Π°ΠΏΡΠ΅ΡΠ°ΡΡ) ΡΡΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π½ΠΎ, ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ ΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΠΌ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π° β ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ, ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΡΡΠΈΡΠ°Π΅ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°ΡΠΈΠΌΠΎΠΉ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ 51 β "ΠΠ΅ΡΡΡΡΠΊΡΠΎΡΡ, ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π½Π΅ ΠΎΡΠΈΠ±Π°ΡΡΡΡ".
47. ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠΉΡΠ΅ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅-ΡΠ»Π΅Π½Ρ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅-ΡΠ»Π΅Π½Ρ Π²ΡΠ΅Π³Π΄Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ Π² ΡΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°; ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΈΡ ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π² ΠΊΠΎΠ΄Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΡΠΊΠ°Π·Π°Π½ ΡΠΎΡ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ, ΡΡΠΎ ΠΈ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
class Employee {
string email_, firstName_, lastName_;
public:
Employee( const char* firstName, const char* lastName ) :
firstName_(firstName), lastName_(lastName),
email_(firstName_+"."+lastName_+"@acme.com") {}
};
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΡΠΈΠ±ΠΊΡ, ΡΡΠΎΠ»Ρ ΠΆΠ΅ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΡ, ΡΠΊΠΎΠ»Ρ ΠΈ ΡΡΡΠ΄Π½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ»Π΅Π½ email_ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° Π΄ΠΎ first_ ΠΈ last_, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΡΠ°ΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅ΡΠ΅ Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»Ρ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅, ΡΠΎ Π²ΡΡΠ²ΠΈΡΡ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ -ΡΠ»Π΅Π½ΠΎΠ² ΠΊΠ»Π°ΡΡΠ° Π½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π΅ΡΠ΅ ΡΡΡΠ΄Π½Π΅Π΅.
ΠΡΠ° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΡΠ·ΡΠΊΠ° ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΡ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π΄ΠΈΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅Π½ΠΎΠ²; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ Π±ΡΠ» Π±Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ½ΠΈΡΡΠΎΠΆΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΡΠ°Π·Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΎΠ·Π΄Π°Π²Π°Π» ΠΈΡ . ΠΠ°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΡΠΈΠ·Π½Π°Π½Ρ Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡΠΌΠΈ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΈΡΠ°ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΡ ΡΠ»Π΅Π½ΠΎΠ² Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠΈ ΡΠ»Π΅Π½Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² ΠΊΠ»Π°ΡΡΠ΅. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°Π·Ρ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌΠΈ Π²ΡΠ΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ»Π΅Π½Π°ΠΌΠΈ. ΠΡΠ΅ Π»ΡΡΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ·Π±Π΅Π³Π°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅Π½Π° ΠΎΡ Π΄ΡΡΠ³ΠΈΡ .
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ (Π½ΠΎ Π½Π΅ Π²ΡΠ΅) Π²ΡΠ΄Π°ΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ Π½Π°ΡΡΡΠ΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°.
Π‘ΡΡΠ»ΠΊΠΈ[Cline99] Β§22.03-1] β’ [Dewhurst03] Β§52-53 β’ [Koenig97] Β§4 β’ [Lakos96] Β§10.3.5 β’ [Meyers97] Β§13 β’ [Murray93] Β§2.1.3 β’ [Sutter00] Β§47
48. Π ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΠΉΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ
Π ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ -ΡΠ»Π΅Π½ΠΎΠ² ΠΏΡΠ΅Π΄ΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΎΡ Π½Π΅Π½ΡΠΆΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΌΠ΅ Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ ΡΠΊΡΡΡΡΠΉ ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
class A {
string s1_, s2_;
public:
A() { s1_ = "Hello, "; s2_ = "world"; }
};
Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ Π²Ρ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ:
Π() : s1_(), s2_() { s1_ = "Hello, "; s2_ = "world"; }
To Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π²Π°ΠΌΠΈ ΡΠ²Π½ΠΎ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ, ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ -ΡΠ»Π΅Π½ΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π°Π΅Ρ ΠΊΠΎΠ΄, Π»ΡΡΡΠ΅ Π²ΡΡΠ°ΠΆΠ°ΡΡΠΈΠΉ Π²Π°ΡΠΈ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΉ ΠΈ ΠΌΠ΅Π½ΡΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°:
Π() : s1_("Hello, "), s2_("world ") { }
ΠΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ° Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅ΠΆΠ΄Π΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ; ΡΡΠΎ β ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΏΡΠ΅ΠΆΠ΄Π΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ (ΡΠΌ. ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ 9).
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΡΠ΅Π³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠΉΡΠ΅ Π·Π°Ρ Π²Π°Ρ Π½Π΅ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ new, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ) Π² ΡΠ΅Π»Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, Π° Π½Π΅ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ (ΡΠΌ. [Sutter02]). ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΡ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° ΡΠ΅ΡΡΡΡΠΎΠ² (ΡΠΌ. ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ 13).