ãã®èšäºãæžããšãã«æ°ã«ãªã£ãã§ããã
CïŒã§ããã°ã©ãã³ã°ããéã«äœ¿çšããæ¹ãè¯ããã®ã«é¢ããäž»ãªæŠã-äŸå€ãŸãã¯åŠççšã®ãªã¿ãŒã³ã³ãŒãã¯é ãéå»ã«ãããŸãïŒ*ïŒããå¥ã®çš®é¡ã®æŠãã¯ãŸã åãŸããŸããïŒã¯ãããŸããäŸå€åŠçã«èœã¡çããŸããããã©ã®ããã«ãæ£ãããåŠçããŸããïŒ
ãæ£ãããããšã«ã€ããŠã¯å€ãã®èŠ³ç¹ãããããã®å€§éšåã¯ãåŠçå¯èœãªäŸå€ã®ã¿ããã£ããããæ®ããåŒã³åºãå ã®ã³ãŒãã«ã¹ããŒããå¿ èŠããããšããäºå®ã«èŠçŽãããŸãã ãããã«ããäŸå€ã倧èãªæ¹æ³ã§äžäœã¬ãã«ã«å°éããå Žåãææã®äººãäžè²«ããç¶æ ã§ãããã©ãããæ確ã§ã¯ãªããããã¢ããªã±ãŒã·ã§ã³å šäœãæ®åœ±ããŸãã
äŸå€ããã£ããããŠåŠçãããã®æ¹æ³ã«ã¯å€ãã®é·æãšçæããããŸãããä»æ¥ã¯å°ãç°ãªããããã¯ãæ€èšããŸãã ã€ãŸããäŸå€ã®çºçã«ç §ãããŠã¢ããªã±ãŒã·ã§ã³ã®äžè²«ããç¶æ ã確ä¿ãããšãããããã¯ã¯ãäŸå€ã«å¯Ÿãã3ã€ã®ã»ãã¥ãªãã£ã¬ãã«ã§ãã
3çš®é¡ã®ä¿èšŒ
1990幎代åŸåãDave Abrahamsã¯ã3ã€ã®ã¬ãã«ã®äŸå€ã»ãã¥ãªãã£ãæäŸããŸãããåºæ¬ä¿èšŒãå³å¯ä¿èšŒãããã³äŸå€ãªãä¿èšŒã§ãã ãã®ã¢ã€ãã¢ã¯ãéçºè ã®C ++ã³ãã¥ããã£ã«å€§æè¿ãããHerb Sutterã«ããæ®åïŒããã³äžéšã®å€æŽïŒã®åŸãäŸå€ã»ãã¥ãªãã£ä¿èšŒãããŒã¹ããæšæºC ++ã©ã€ãã©ãªãããã³ã¢ããªã±ãŒã·ã§ã³éçºã§åºã䜿çšããå§ããŸããã
åœåããããã®ä¿èšŒã¯C ++ã§STLPortã©ã€ãã©ãªãå®è£ ããããã«Dave Abrahamsã«ãã£ãŠææ¡ãããŸããããäŸå€ã®å®å šæ§ã®èãæ¹ã¯ç¹å®ã®ããã°ã©ãã³ã°èšèªã«çµã³ä»ããããŠããããJavaãCïŒãªã©ã®äŸå€ãäž»èŠãªãšã©ãŒåŠçã¡ã«ããºã ãšããŠäœ¿çšããä»ã®èšèªã§äœ¿çšã§ããŸãã ããã«ãçŸåšãäŸå€ã»ãã¥ãªãã£å®çŸ©ã«ã¯2ã€ã®ããŒãžã§ã³ããããŸãïŒïŒ1ïŒDave Abrahamsã«ãã£ãŠææ¡ãããå ã®ããŒãžã§ã³ãšïŒ2ïŒSatterããã³Straustrupã«ãã£ãŠæ®åããä¿®æ£ããŒãžã§ã³ã§ãããã©ã€ãã©ãªã ãã§ãªãã¢ããªã±ãŒã·ã§ã³ã¢ããªã±ãŒã·ã§ã³ã«ãé©ããŠããŸãã
åºæ¬ä¿èšŒ
åæå®çŸ© ïŒã äŸå€ãçºçããå ŽåããªãœãŒã¹ã®æŒæŽ©ã¯ãããŸãã ãã
çŸä»£ã®å®çŸ©ã¯æ¬¡ã®ãšããã§ã ãã ç¹å®ã®ã¡ãœããã§äŸå€ãçºçããå Žåãããã°ã©ã ã®ç¶æ ã¯äžè²«ããŠããå¿ èŠããããŸã ãã ããã¯ããªãœãŒã¹ãªãŒã¯ããªãããšã ãã§ãªããã¯ã©ã¹ã®äžå€æ¡ä»¶ã®ä¿æãæå³ããŸããããã¯ãåºæ¬çãªå®çŸ©ãšæ¯èŒããŠããäžè¬çãªåºæºã§ãã
ããã2ã€ã®å®åŒåã®éãã¯ããã®ä¿èšŒã¯ããšããšC ++ã§ã©ã€ãã©ãªãå®è£ ããããã«ææ¡ããããã®ã§ãããã¢ããªã±ãŒã·ã§ã³ã¢ããªã±ãŒã·ã§ã³ãšã¯é¢ä¿ããªããšããäºå®ã«ãããã®ã§ãã ããããããäžè¬çãªã±ãŒã¹ïŒã€ãŸããã©ã€ãã©ãªã ãã§ãªããã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠãïŒã«ã€ããŠè©±ããšããªãœãŒã¹ãªãŒã¯ã¯ãã°ã®åå ã®1ã€ã«éããããã°ã®åå ãšã¯éããŸããã ä»»æã®å®å®ããæç¹ïŒ**ïŒã§äžå€åŒãä¿åããããšã¯ãå€éšã³ãŒããã¢ããªã±ãŒã·ã§ã³ã®äžäžèŽç¶æ ããèŠããããšãã§ããªããšããä¿èšŒã§ããããã¯ããªãœãŒã¹ãªãŒã¯ããªãããšãšåããããéèŠã§ãã ããå£åº§ããå¥ã®å£åº§ã«ééãããšãã«ãããå£åº§ãããéããæ®ããããšã¯ã§ããŠããå¥ã®å£åº§ã«ãå±ããªããå Žåãéè¡ã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã¯ã»ãšãã©ã¡ã¢ãªãªãŒã¯ã«èå³ãæã¡ãŸããã
å³æ Œãªä¿èšŒ
äŸå€ã®å³å¯ãªä¿èšŒã®å®çŸ©ã«ã€ããŠã¯ãå ã®å®çŸ©ãšææ°ã®å®çŸ©ã¯é¡äŒŒããŠããã次ã®ããã«èŠçŽãããŸããã æäœäžã«äŸå€ãçºçããå Žåãããã¯ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã«åœ±é¿ãäžããŸãã ã
èšãæããã°ãå³æ ŒãªäŸå€ä¿èšŒã«ããããã¹ãŠãåãåã£ããšãããŸãã¯äœãåãåã£ãŠããªããšãã«ãã©ã³ã¶ã¯ã·ã§ã³ããã©ã³ã¶ã¯ã·ã§ã³ãããããšãä¿èšŒãããŸãã ãã®å ŽåãäŸå€ãçºçãããšãæäœåã®ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã«ããŒã«ããã¯ããæäœå šäœãæ£åžžã«å®äºããå Žåã«ã®ã¿æ°ããç¶æ ã«å€æŽããå¿ èŠããããŸãã
é€å€ã¯ä¿èšŒãããŠããŸãã
äŸå€ãååšããªãããšã®ä¿èšŒã¯ãã ã©ã®ãããªç¶æ³ã§ãäŸå€ãã¹ããŒãããããšã¯ãããŸãã ãã«éå®ãããŸã ã
ãã®ä¿èšŒã¯å®çŸ©ã®ç¹ã§ã¯æãåçŽã§ãããèŠãç®ã»ã©åçŽã§ã¯ãããŸããã ãŸããäžè¬çãªå Žåãç¹ã«.Netç°å¢ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã»ãŒãã¹ãŠã®ãã€ã³ãã§äŸå€ãçºçããå¯èœæ§ããããããæäŸããããšã¯ã»ãšãã©äžå¯èœã§ãã å®éã«ã¯ãéçšåäœã®ã¿ããã®ä¿èšŒã«åŸãã以åã®ã¬ãã«ã®ä¿èšŒãæ§ç¯ãããã®ã¯ãã®ãããªéçšã«åºã¥ããŠããŸãã CïŒã§ã¯ããã®ä¿èšŒãæäŸããæ°å°ãªãæäœã®1ã€ã¯ãªã³ã¯ã®å²ãåœãŠã§ãããC ++ã§ã¯ãå€ã®äº€æãå®è£ ããã¹ã¯ããé¢æ°ã§ãã ãããã®é¢æ°ã«åºã¥ããŠããã¹ãŠã®ãããŒãã£ãªäœæ¥ããäžæãªããžã§ã¯ãã§å®è¡ãããçµæã®å€ã«å²ãåœãŠããããšãã«ãäŸå€ã®å³å¯ãªä¿èšŒããã°ãã°å®çŸãããŸãã
第äºã«ãäŸå€ãååšããªããšããä¿èšŒã«åŸããªãæäœãããå Žåãä»ã®æ©èœã®æ£åžžãªæäœãä¿èšŒã§ããªãå ŽåããããŸãã ãããã£ãŠãããšãã°ãC ++ã§ã¯ãã³ã³ããã®äŸå€ïŒãŸãã¯ãªãœãŒã¹ãªãŒã¯ïŒã®åºæ¬çãªä¿èšŒããæäŸããããã«ããŠãŒã¶ãŒã¿ã€ãã®ãã¹ãã©ã¯ã¿ãŒãäŸå€ãã¹ããŒããªãããšãå¿ èŠã§ãã
äžèšã§èª¬æãã3ã€ã®äŸå€ã®ã»ãã¥ãªãã£ä¿èšŒã¯ãæã匱ããã®ããæã匷ããã®ãžãšé²ã¿ãŸãã 以éã®åä¿èšŒã¯ãåã®ä¿èšŒã®ã¹ãŒããŒã»ããã§ãã ããã¯ãå³å¯ãªä¿èšŒã®å±¥è¡ã¯èªåçã«åºæ¬çãªä¿èšŒã®å±¥è¡ã䌎ããäŸå€ã®äžåšã®ä¿èšŒã¯å³å¯ãªä¿èšŒã®å±¥è¡ã䌎ãããšãæå³ããŸãã ã³ãŒããäŸå€ã®åºæ¬çãªä¿èšŒãããæºãããªãå Žåãããã¯ã¢ããªã±ãŒã·ã§ã³ã®æéç匟ã§ãããé ããæ©ããäžå¿«ãªçµæã«ã€ãªããããã®ç¶æ ãå°çã«å£ããŸãã
次ã«ãããã€ãã®äŸãèŠãŠã¿ãŸãããã
åºæ¬ä¿èšŒéåã®äŸ
C ++ã§ã®ã¡ã¢ãªããã³ãªãœãŒã¹ãªãŒã¯ãé²ãäž»ãªæ¹æ³ã¯RAII ïŒResource Acquisition Is InitializationïŒã€ãã£ãªã ã§ããããã¯ããªããžã§ã¯ããã³ã³ã¹ãã©ã¯ã¿ãŒã§ãªãœãŒã¹ãååŸãããã¹ãã©ã¯ã¿ãŒã§ããã解æŸãããšããäºå®ããæããŸãã ãŸããäŸå€ãçºçãããšããªã©ãäœããã®çç±ã§ãªããžã§ã¯ããã¹ã³ãŒããé¢ãããšãã¹ãã©ã¯ã¿ãèªåçã«åŒã³åºããããããäŸå€ã®å®å šæ§ã確ä¿ããããã«åãã€ãã£ãªã ã䜿çšãããããšã¯é©ãããšã§ã¯ãããŸããã
CïŒã§ã¯ããã®ã€ãã£ãªã ã¯IDisposableã€ã³ã¿ãŒãã§ã€ã¹ãšããŠç§»è¡ããã³ã³ã¹ãã©ã¯ãã䜿çšããŸãããC ++ãšã¯ç°ãªããç¹å®ã®ã¹ã³ãŒãå ã®ãªãœãŒã¹ã®ã©ã€ãã¿ã€ã ã®å¶åŸ¡ã«é©çšã§ããã³ã³ã¹ãã©ã¯ã¿ãŒã§ãã£ããã£ãããå€ãã®ãªãœãŒã¹ã®ç®¡çã«ã¯é©ããŠããŸããã
äŸãèŠãŠã¿ãŸãããïŒ
// ,
class DisposableA : IDisposable
{
public void Dispose() {}
}
//
class DisposableB : IDisposable
{
public DisposableB()
{
disposableA = new DisposableA();
throw new Exception( "OOPS!" );
}
public void Dispose() {}
private DisposableA disposableA;
}
// -
using ( var disposable = new DisposableB())
{
// ! Dispose
// DisposableB, DisposableA
}
* This source code was highlighted with Source Code Highlighter .
ãã®ããã DisposableAãšDisposableBã® 2ã€ã®äœ¿ãæšãŠã¯ã©ã¹ããããŸããåã¯ã©ã¹ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã§äžéšã®ç®¡ç察象ãªãœãŒã¹ããã£ããã£ãã Disposeã¡ãœããã§è§£æŸããŸãã ãã¡ã€ãã©ã€ã¶ã¯ããªãœãŒã¹ã®ç¢ºå®çãªãªãªãŒã¹ãä¿èšŒããå©ãã«ã¯ãªããªããããçŸæç¹ã§ã¯ãã¡ã€ãã©ã€ã¶ãèæ ®ããªãããã«ããŸããããããã¯å Žåã«ãã£ãŠã¯äžå¯æ¬ ã§ãã
ãã®å Žåã DisposableBã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã«ãã£ãŠäŸå€ãã¹ããŒãããšãã 䜿ãæšãŠãªããžã§ã¯ããååšããªãã£ãããã Disposeã¡ãœãããåŒã³åºãããšã¯ãããŸããã ãã®ç¹ã§ãã»ãšãã©ã®äž»æµã®ããã°ã©ãã³ã°èšèªã®åäœã¯ã»ãŒåãã§ãããããã€ãã®éãããããŸãã é¡äŒŒç¹ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒããã¯ã©ãã·ã¥ãããå ŽåãåŒã³åºãå ã®ã³ãŒãã¯ãŸã æ§ç¯ãããŠããªããªããžã§ã¯ããžã®ãªã³ã¯ãååŸã§ããããã®ãªãœãŒã¹ãæ瀺çã«è§£æŸã§ããªãããšã§ãã ãã ããå®å šã«æ§ç¯ããããã£ãŒã«ãã®ãã¹ãã©ã¯ã¿ãèªåçã«åŒã³åºãããC ++èšèªãšã¯ç°ãªããããã¯ããããŒãžããCïŒèšèªïŒ***ïŒã§ã¯çºçããŸãããDisposableBã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãäŸå€ãã¹ããŒãã以åã«ãã£ããã£ãããªãœãŒã¹ã解æŸããªãå Žåã ããªãœãŒã¹ã®æµåºãïŒãŸãã¯ãå°ãªããšãé決å®çãªãªãŒã¹ïŒãåãåããŸãã
åãåé¡ã¯ããã埮åŠãªåœ¢ã§çŸããŸãã åã«æ€èšããã±ãŒã¹ã§ã¯ã䜿ãæšãŠãªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ãäœæãããã®åŸäŸå€ãã¹ããŒãããããšãã¯ã£ãããšããããŸãã ãã ããåºæ¬çãªäŸå€ä¿èšŒããªãããšã確èªããã®ãããå°ãé£ããå ŽåããããŸãã
class Base : IDisposable
{
public Base()
{
//
}
public void Dispose() {}
}
class Derived : Base, IDisposable
{
public Derived( object data)
{
if (data == null )
throw new ArgumentNullException( "data" );
// OOPS!!
}
}
// -
using ( var derived = new Derived( null ))
{}
* This source code was highlighted with Source Code Highlighter .
Derivedã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã§äŸå€ãçæãããšãåºæ¬ã¯ã©ã¹ã®Disposeã¡ãœãããåŒã³åºãããªãããïŒ****ïŒãåºæ¬çãªäŸå€ä¿èšŒã«éåãããªãœãŒã¹ãªãŒã¯ãçºçããŸãã ç¹°ãè¿ããŸãããã³ã³ãã€ã©ã¯usingæ§é ã®ããªãºã ãéããŠã®ã¿IDisposableã€ã³ã¿ãŒãã§ã€ã¹ãç¥ã£ãŠããããããã¹ãŠã®å Žåã䜿ãæšãŠãªããžã§ã¯ããå¥ã®ã¯ã©ã¹ã®ãã£ãŒã«ãã§ããå Žåãããã°ã©ãã®ã¿ãDisposeã¡ãœãããåŒã³åºããŸãã
åºæ¬ã¯ã©ã¹ã«å ããŠããã£ãŒã«ãã®ããããã®ã³ã³ã¹ãã©ã¯ã¿ãŒãäŸå€ãã¹ããŒã§ããå Žåããã£ãŒã«ãåæååã¯åæ§ã®ãžã§ãŒã¯ãåçã§ããŸãã
class ComposedDisposable : IDisposable
{
public void Dispose() {}
private readonly DisposableA disposableA = new DisposableA();
// , DisposableB ? OOPS!!
private readonly DisposableB disposableB = new DisposableB();
}
* This source code was highlighted with Source Code Highlighter .
ãã®å Žåã DisposableBã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãã disposableBãã£ãŒã«ãã®åæåæã«äŸå€ãã¹ããŒãããš ãããããã£ããããŠãæ¢ã«ãã£ããã£ãŒãããªãœãŒã¹ã解æŸããããšã¯ã§ããŸããã C ++ã«ã¯ãåæåãªã¹ãã§çºçããäŸå€ããã£ãããããããªãã®ããããŸããïŒ äŸå€ãšã¡ã³ããŒã®åæåãåç §ïŒãCïŒã«ã¯ãã®ãããªå¯èœæ§ã¯ãªãããããã®ç¶æ³ããæãåºãæ¹æ³ã¯1ã€ãããããŸããã
ãããŸã§ã®ãã¹ãŠã®ã±ãŒã¹ã«é¢ããŠãäŸå€ã®åºæ¬çãªä¿èšŒã®æäŸã¯éçºè ã«å®å šã«å§ããããŠããŸããCïŒã¯ãããã®ç®çã®ããã®ãç ç³ããæäŸããªãããã§ãã æ®ã£ãŠããã®ã¯ããµããªããžã§ã¯ããæ£ããé åºã§ äœæããã³ã³ã¹ãã©ã¯ã¿ãŒã®æåŸã«äœ¿ãæšãŠãã£ãŒã«ããäœæãããããã®äœæãtry / catchãããã¯ã§ã©ããããŠãäŸå€ãçºçããå Žåã«ãã¹ãŠã®ãªãœãŒã¹ãã¯ãªã¢ããããšã§ãã
äŸå€ã®å³å¯ãªä¿èšŒã®äŸã ãªããžã§ã¯ãåæååããã³ã³ã¬ã¯ã·ã§ã³åæåå
äžèšã®äŸå€ã®åºæ¬çãªä¿èšŒã®éåã®äŸã¯ããããã¯ããã»ã©ãã§ãããããŠããŸããããããã»ã©äžè¬çã§ã¯ãããŸããã ãŸããè€æ°ã®ç®¡ç察象ãªãœãŒã¹ãå«ããªããžã§ã¯ããäœæããå ŽåãCïŒèšèªã³ã³ãã€ã©ãŒã圹ã«ç«ããªãå Žåã¯ããªããžã§ã¯ããã³ã¬ã¯ã·ã§ã³ãäœæãããšããªã©ãä»ã®ããã€ãã®å Žåã«åœ¹ç«ã¡ãŸãã
ãªããžã§ã¯ãããã³ã³ã¬ã¯ã·ã§ã³ã®åæååïŒãªããžã§ã¯ãåæååããã³ã³ã¬ã¯ã·ã§ã³åæååïŒã¯ããªããžã§ã¯ãã®äœæãšåæåããŸãã¯ã³ã¬ã¯ã·ã§ã³ã«èŠçŽ ã®ãªã¹ããèšå®ããååæ§ãä¿èšŒããŸãã 次ã®äŸãèŠãŠã¿ãŸãããã
class Person
{
public string FirstName { get ; set ; }
public string LastName { get ; set ; }
public int Age { get ; set ; }
}
var person = new Person
{
FirstName = "Bill" ,
LastName = "Gates" ,
Age = 55,
};
* This source code was highlighted with Source Code Highlighter .
äžèŠã以äžã®æ§æç³è¡£ã®ããã«æãããããããŸããã
var person = new Person();
person.FirstName = "Bill" ;
person.LastName = "Gates" ;
person.Age = 55;
* This source code was highlighted with Source Code Highlighter .
ãã ããå®éã«ã¯ããªããžã§ã¯ãåæååãåŒã³åºããããšãäžæå€æ°ãäœæããããã®ç¹å®ã®å€æ°ã®ããããã£ãå€æŽãããŠãããæ°ãããªããžã§ã¯ãã«å²ãåœãŠãããŸã ã
var tmpPerson = new Person();
tmpPerson.FirstName = "Bill" ;
tmpPerson.LastName = "Gates" ;
tmpPerson.Age = 55;
var person = tmpPerson;
* This source code was highlighted with Source Code Highlighter .
ããã«ããããªããžã§ã¯ããäœæããããã»ã¹ã®ååæ§ãšãã»ãã¿ãŒã®1ã€ã«ãã£ãŠäŸå€ãçºçããå Žåã«éšåçã«åæåããããªããžã§ã¯ãã䜿çšã§ããªããªããŸãã åæ§ã®ååã¯ãã³ã¬ã¯ã·ã§ã³ã®åæååã«ãããŸãããªããžã§ã¯ããäžæã³ã¬ã¯ã·ã§ã³ã«è¿œå ããããããæžã蟌ãŸããåŸã«ã®ã¿ãäžæå€æ°ãæ°ãããªããžã§ã¯ãã«å²ãåœãŠãããŸãã
ãããã®2ã€ã®æŠå¿µã®æ ¹åºã«ããååã¯ããã€ãã£ãã³ãŒãã§ã®äŸå€ã®å³å¯ãªä¿èšŒã®ç¬èªã®å®è£ ã§ç°¡åã«äœ¿çšã§ããŸãã ãããè¡ãã«ã¯ãç¹å®ã®äžæå€æ°ã§ãªããžã§ã¯ãã®å éšç¶æ ã®ãã¹ãŠã®å€æŽãå®è¡ããã ãã§ååã§ãããå®äºåŸã«ã®ã¿å®éã®ç¶æ ãã¢ãããã¯ã«å€æŽãããŸãã
ãããã«
äŸå€ãæ£ããåŠçããããšã¯ç°¡åãªããšã§ã¯ãªããããã€ãã®äŸã瀺ããŠããããã«ãäŸå€ã®åºæ¬çãªä¿èšŒããé£ããå ŽåããããŸãã ãã ãããã®ãããªä¿èšŒãæäŸããããšã¯ãã¢ããªã±ãŒã·ã§ã³å šäœã®èãå±€ã§ãªãœãŒã¹ãå¡ãã€ã¶ããããã1ãæã§ãªãœãŒã¹ãæäœããè€éããé ãæ¹ãã¯ããã«ç°¡åã§ãããããã¢ããªã±ãŒã·ã§ã³ã®éçºã«äžå¯æ¬ ãªæ¡ä»¶ã§ãã 10幎åã«Scott Meyersã«ãã£ãŠçå®ãããé»éã®ã«ãŒã«ã¯ä»ã§ãæå¹ã§ãã æ£ãã䜿ãããããééã£ãŠäœ¿ãã«ããã¯ã©ã¹ãäœæã ãäŸå€ã®ä¿èšŒãæããã«éèŠãªåœ¹å²ãæãããŸãã
ãããã®ä¿èšŒã®å®éã®é©çšã«ã€ããŠè©±ãå ŽåãèŠããŠããã¹ãããã€ãã®ãã€ã³ãããããŸãã ãŸããåºæ¬çãªäŸå€ä¿èšŒãæºãããªãã³ãŒãã¯æ£ãããããŸããã ããã«åºã¥ããŠã䜿çšãŸãã¯å€æŽããããšãã«ç¶æ ãå£ããªãã¢ããªã±ãŒã·ã§ã³ãäœæããããšã¯äžå¯èœã§ãïŒ*****ïŒã 第äºã«ãåå·çã«ãªãããæ倧éã®ä¿èšŒãæ±ããŸãã éåæäŸå€ãååšãããããäŸå€ããªãããšã100ïŒ ä¿èšŒããããšã¯ã»ãšãã©äžå¯èœã§ãããå³å¯ãªä¿èšŒãå®è£ ããããšã§ãããå€ãã®å Žåãäžåœã«é«äŸ¡ã«ãªãå¯èœæ§ããããŸãã
çµè«ãšããŠã次ã®ããã«èšããŸãã äŸå€ã®å®å šæ§ã®ä¿èšŒã¯äžèœè¬ã§ã¯ãªããä¿¡é Œã§ããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åªããåºç€ã§ã ã
----------------------
ïŒ*ïŒå®éã«ã¯ã1ã€ã®åçŽãªçç±ã®ããã«ãããããªãè°è«ã¯ãããŸããã§ãããäŸå€ãåŠçããã«.Netãã©ãããã©ãŒã ã§ããã°ã©ãã³ã°ããããšã¯ã§ããŸããã ãã®ãããªè°è«ã¯ãç¹ã«äœã¬ãã«ã®ããã°ã©ãã³ã°ã«é¢ããŠã¯ãC ++èšèªãªã©ã«é¢é£ããŠããŸãã
ïŒ**ïŒäžè¬ã«ãäžå€ä¿åãåžžã«å¿ èŠãšãã人ã¯ããŸããã éåžžã openã¡ãœããã®åŒã³åºãã®äžå€ã®ãåããšãåŸããå¿ èŠã§ãããäœæ¥ã®ãäžéšãã®ã¿ãå®è¡ããéããã¡ãœããã®åŒã³åºãåŸã«ä¿åããå¿ èŠã¯ãããŸããã
ïŒ***ïŒCïŒã®ãããªããæŽç·Žãããèšèªã¯ãå€ãC ++ã®ãããªããšãããªããããããªãããšã¯éåžžã«é¢çœãããã«æãããããããŸããããå®éã¯ããã§ãã äŸãšããŠãåè¿°ã®ã³ãŒããCïŒããC ++ã«æžãæããŸãããã
class Resource1
{
public :
Resource1()
{
// , -
//
}
~Resource1()
{
//
}
};
class Resource2
{
public :
Resource2()
{
// resource1_
throw std::exception( "Yahoo!" );
}
private :
Resource1 resource1_;
};
// - Resource2
Resource2 resource2;
* This source code was highlighted with Source Code Highlighter .
C ++ã§åè¿°ããããã«ïŒCïŒãšã¯ç°ãªãïŒãã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ãŒã§äŸå€ãã¹ããŒããããšãæ¢ã«æ§ç¯ããããã£ãŒã«ãïŒã€ãŸãããµããªããžã§ã¯ãïŒã®ãã¹ãã©ã¯ã¿ãŒãèªåçã«åŒã³åºãããŸãã ã€ãŸãããã®å Žåã Resource1ãªããžã§ã¯ãã®ãã¹ãã©ã¯ã¿ãŒã®åŒã³åºãã¯èªåçã«è¡ããããªãœãŒã¹ãªãŒã¯ã¯çºçããŸããã
CïŒèšèªãšC ++èšèªã®ãã®ãããªåäœã®éãã¯ç°¡åã«èª¬æã§ããŸãã C ++ã§ã¯ããªãœãŒã¹ã¯åçã«å²ãåœãŠãããã¡ã¢ãªãå«ããã¹ãŠã®ãã®ã§ãããããããªãœãŒã¹ç®¡çããŒã«ãããé«ãã¬ãã«ã«ããçç±ã§ãã CïŒèšèªã§äœæ¥ããå¿çšããã°ã©ããŒã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã§ãªãœãŒã¹ããã£ããã£ãŒããã®ã§ã¯ãªããusingãããã¯ã§ãªãœãŒã¹ã䜿çšããããšãéåžžã«å€ããããŸãã ãããŠããã圌ããã®ãããªåé¡ã«çŽé¢ããŠãããªãã圌ã¯ã³ã³ãã€ã©ã®å©ããªãã«èªåã§ããã解決ããªããã°ãªããŸããã
ãšããã§ãHerb Sutterã¯åœŒã®èšäºã§ãã§ã«ããã«ã€ããŠäžåºŠè©±ããŸããïŒ ãC ++ãCïŒãããã³Javaã®ã³ã³ã¹ãã©ã¯ã¿äŸå€ã ã
ïŒ****ïŒãã§ã«ãããã®ã¡ã¢ã§ãããå ¥æããŠãããããããŸããããããã¯éåžžã«éèŠã§ãããæåŸãã2çªç®ã®ã¡ã¢ã§ãã 圌ãã¯ãã°ãã°ã€ã³ã¿ãã¥ãŒã§ãã®ãããªäŸãèšå®ããããšã奜ãã®ã§ãä»ãç§ã®èªè ã¯ããã«å¯Ÿããæ£ããçããç¥ã£ãŠããŸãïŒ
ïŒ*****ïŒ OutOfMemoryExceptionãThreadAbortExceptionãªã©ã®ãéåæãäŸå€ã®äžè²«ããçºçãä¿èšŒããããšã¯ã»ãšãã©äžå¯èœã§ããããããã®èšäºã§è¿°ã¹ãããŠããããšã¯ãã¹ãŠåæäŸå€ã«ã®ã¿é©çšãããŸãã ããã§ã®èšŒæ ïŒã Thread.Abortã¡ãœããã®å±éºæ§ã«ã€ããŠã ã