Â执行æžæž„å‡½æ•°ä½“å¹¶ç ´åä»»ä½•è‡ªåŠ¨å¯¹è±¡åŽ Â Â åœ¨ä¸»ä½“å†…åˆ†é…,类Xçš„æžæž„函数调用æžæž„函数   X的直接æˆå‘˜[n3126.pdf12.4§6]
这让我想知é“,如果ä¸ç ´åæˆå‘˜ï¼Œä½¿ç”¨æžæž„函数有什么用?请æ供示例
ç”案 0 :(得分:3)
æˆå‘˜æœ¬èº«ä¸è´Ÿè´£è¿›è¡Œé¢å¤–的清ç†å·¥ä½œã€‚或者在资æºç®¡ç†çš„情况下,确ä¿ä¸Žå¯¹è±¡å…³è”的资æºè¢«æ£ç¡®é‡Šæ”¾ã€‚请记ä½ï¼Œå¹¶éžæ‰€æœ‰æˆå‘˜éƒ½å…·æœ‰å°†è¢«è°ƒç”¨çš„æžæž„函数(指针没有æžæž„å‡½æ•°ï¼‰ã€‚å› æ¤ï¼Œå¦‚果您有指针,则需è¦æ‰‹åŠ¨ç®¡ç†å®ƒä»¬ã€‚
带指针的示例资æºç®¡ç†ã€‚
shared_ptr::~shared_ptr()
{
if (decrementReferenceCountAndCheckForZero())
{
cleanupResources();
}
}
实施例。使用框架。没有æˆå‘˜çŸ¥é“框架,但工人知é“。
MyWorker::MyWorker()
{
Framwork::Register(this);
}
MyWorker::~MyWorker()
{
Framework::Unrigester(this);
}
ç”案 1 :(得分:2)
与对象ä¸å†å˜åœ¨æ—¶éœ€è¦è§£é™¤å…³è”/释放/特殊处ç†çš„类实例关è”的任何内容。
å‡ ä¸ªä¾‹å:
ç”案 2 :(得分:1)
所有声明的æ„æ€æ˜¯å¦‚æžœä½ æœ‰ä¸€ä¸ªæžæž„函数定义为
Foo::~Foo()
{
Bar b;
b.do_whatever();
}
然åŽb
对象的æžæž„函数在任何Foo
æˆå‘˜çš„æžæž„函数之å‰è¿è¡Œã€‚执行æžæž„函数的主体,并首先销æ¯åœ¨ä¸»ä½“内分é…的自动对象,å³b
。
ç”案 3 :(得分:1)
您的类å¯èƒ½ä¼šé€šè¿‡è°ƒç”¨å¯¹è±¡çš„æ•°æ®æˆå‘˜çš„æžæž„函数æ¥ç®¡ç†æœªå‘布的资æºã€‚å¦‚æžœæ˜¯è¿™æ ·ï¼Œé‚£ä¹ˆé‡Šæ”¾èµ„æºçš„代ç 属于您编写的æžæž„函数。
例如,如果您使用new
分é…对象,则必须使用delete
释放它们。如果您使用fopen
打开文件,则会使用fclose
å…³é—该文件。如果您使用pthread_mutex_lock
获å–Posix互斥é”,则必须将其与pthread_mutex_unlock
一起å‘布。
对于æ¯ç§èµ„æºéœ€æ±‚,您(或其他人)å¯ä»¥ç¼–写一个管ç†å’Œé‡Šæ”¾è¯¥èµ„æºçš„类,并æ供对其基本æ“ä½œçš„è®¿é—®ã€‚å› æ¤å˜åœ¨ç±»std::unique_ptr
,std::shared_ptr
,std::lock_guard
,std::fstream
ç‰ç±»ã€‚当然,为简å•èµ·è§ï¼Œæ‚¨é€šå¸¸å¸Œæœ›åªæœ‰ä¸€ä¸ªç±»æ¥ç®¡ç†ç‰¹å®šç±»åž‹çš„资æºã€‚å› æ¤ï¼Œç”±äºŽ{C} 11ä¸å˜åœ¨std::lock_guard
ï¼Œå› æ¤æ‚¨ç¼–写自己的类以释放互斥é”çš„å”¯ä¸€åŽŸå› æ˜¯ï¼Œå¦‚æžœæ‚¨è¦ä¸ºæ ‡å‡†ç‰ˆæ供一些替代接å£ã€‚ç†æƒ³æƒ…况下,éžé»˜è®¤æžæž„函数的类在您自己的代ç ä¸åº”该很少 - 通常已ç»å˜åœ¨å¯ç”¨ä½œæ•°æ®æˆå‘˜æˆ–自动å˜é‡çš„类,并且其æžæž„函数å¯ä»¥å®Œæˆè¿™é¡¹å·¥ä½œã€‚
ç”案 4 :(得分:0)
è¿™å¯èƒ½å¯¹æ‚¨æœ‰æ‰€å¸®åŠ©
å‡è®¾ä¸€ä¸ªç±»å…·æœ‰åŠ¨æ€åˆ›å»ºçš„someClassæ•°ç»„ã€‚åœ¨ä½ çš„æž„é€ å‡½æ•°ä¸å‡è®¾ä½ 创建了
someClass * p = new someClass [10] ;
然åŽåœ¨æžæž„函数ä¸ä½ 会写
delete []p ;