delete å¼
new å¼ã«ãã£ã¦ä»¥åã«ç¢ºä¿ããããªãã¸ã§ã¯ããç ´æ£ããåå¾ãããã¡ã¢ãªé åãè§£æ¾ãã¾ãã
ç®æ¬¡ |
[ç·¨é] æ§æ
:: (ãªãã·ã§ã³) delete expression
|
(1) | ||||||||
:: (ãªãã·ã§ã³) delete [] expression
|
(2) | ||||||||
[ç·¨é] 説æ
1ã¤ãã®å½¢å¼ (éé å) ã®å ´åã expression ã¯ãªãã¸ã§ã¯ãåã¸ã®ãã¤ã³ã¿ã§ãããããã®ãããªãã¤ã³ã¿ã«æèçã«æé»ã«å¤æå¯è½ãªã¯ã©ã¹åã§ãªããã°ãªããããã®å¤ã¯ãã«ã§ãããã new å¼ã«ãã£ã¦ä½æãããéé åãªãã¸ã§ã¯ãã¸ã®ãã¤ã³ã¿ã§ãããã new å¼ã«ãã£ã¦ä½æãããéé åãªãã¸ã§ã¯ãã®åºåºé¨åãªãã¸ã§ã¯ãã¸ã®ãã¤ã³ã¿ã§ãªããã°ãªãã¾ããã expression ããã以å¤ã®å ´å (é åå½¢å¼ã® new å¼ã«ãã£ã¦åå¾ãããã¤ã³ã¿ã§ããå ´åãå«ã)ãåä½ã¯æªå®ç¾©ã§ãã
2ã¤ãã®å½¢å¼ (é å) ã®å ´åã expression ã¯ãã«ãã¤ã³ã¿å¤ã§ããããé åå½¢å¼ã® new å¼ã«ãã£ã¦ä»¥åã«åå¾ããããã¤ã³ã¿å¤ã§ãªããã°ãªãã¾ããã expression ããã以å¤ã®å ´å (éé åå½¢å¼ã® new å¼ã«ãã£ã¦åå¾ããããã¤ã³ã¿ã§ããå ´åãå«ã)ãåä½ã¯æªå®ç¾©ã§ãã
å¼ã®çµæã¯å¸¸ã« void åã§ãã
åé¤å¯¾è±¡ã®ãªãã¸ã§ã¯ããåé¤ã®æç¹ã§ä¸å®å ¨ã¯ã©ã¹åã§ããããã®å®å ¨ã¯ã©ã¹ãéããªãã¢ã«ãªãã¹ãã©ã¯ã¿ã ã¾ãã¯è§£æ¾é¢æ°ãæã¤å ´åãåä½ã¯æªå®ç¾©ã§ãã
expression ããã«ãã¤ã³ã¿ã§ãªããã¤è§£æ¾é¢æ°ãç ´æ£åé¤å½¢å¼ã§ãªã (C++20以ä¸)å ´åã delete
å¼ã¯ãã®ç ´æ£å¯¾è±¡ã®ãªãã¸ã§ã¯ãã«å¯¾ãã¦ãã¾ãã¯ç ´æ£å¯¾è±¡ã®é
åã®ãã¹ã¦ã®è¦ç´ ã«å¯¾ã㦠(é
åã®æå¾ã®è¦ç´ ããæåã®è¦ç´ ã®é ã§)ããã¹ãã©ã¯ã¿ãå¼ã³ã¾ã (ããããã°)ã
ãã®å¾ãããããã®ãã¹ãã©ã¯ã¿ãä¾å¤ãæãããã©ããã«ãããããã delete å¼ã¯è§£æ¾é¢æ° operator delete (1ã¤ãã®ãã¼ã¸ã§ã³ã®å ´å) ã¾ã㯠operator delete[] (2ã¤ãã®ãã¼ã¸ã§ã³ã®å ´å) ãå¼ã³ã¾ãã ãã ã対å¿ãã new å¼ãå¥ã® new å¼ã¨åæããã¦ããå ´åã¯é¤ãã¾ãã (C++14以ä¸)
è§£æ¾é¢æ°ã¯ expression ã®æããªãã¸ã§ã¯ãã®åçãªåã®ã¹ã³ã¼ãã§ååæ¢ç´¢ããã¾ãã ããã¯ã¯ã©ã¹åºæã®è§£æ¾é¢æ° (ããããã°) ãã°ãã¼ãã«ãªãã®ãããåã«è¦ä»ããã¨ããæå³ã§ãã delete
å¼ã« ::
ãåå¨ããå ´åã¯ããã®ååæ¢ç´¢ã¯ã°ãã¼ãã«åå空éã®ã¿ã調ã¹ã¾ãã
ååæ¢ç´¢ãè¤æ°ã®è§£æ¾é¢æ°ãè¦ä»ããå ´åãå¼ã°ãã颿°ã¯ä»¥ä¸ã«å¾ã£ã¦é¸æããã¾ã (ãããã®é¢æ°ããã³ãã®å¹æã®è©³ç´°ãªèª¬æã¯ã¤ãã¦ã¯è§£æ¾é¢æ°ãåç §ãã¦ãã ãã)ã
|
(C++20以ä¸) |
|
(C++17以ä¸) |
- è¦ä»ãã£ãè§£æ¾é¢æ°ãã¯ã©ã¹åºæã®å ´åã¯ããµã¤ãºé対å¿ã®ã¯ã©ã¹åºæã®è§£æ¾é¢æ° (std::size_t åã®å¼æ°ãåããªã) ãããµã¤ãºå¯¾å¿ã®ã¯ã©ã¹åºæã®è§£æ¾é¢æ° (std::size_t åã®å¼æ°ãåã) ãããåªå ããã¾ãã
|
(C++14以ä¸) |
ååãããè¨æ¶åã®ãããã¯ã¸ã®ãã¤ã³ã¿ããä¸è¨ã®å¦çã«ãã£ã¦é¸æãããè§£æ¾é¢æ°ã«ç¬¬1弿°ã¨ãã¦æ¸¡ããã¾ãã ãããã¯ã®ãµã¤ãºããªãã·ã§ãã«ãª std::size_t
弿°ã¨ãã¦æ¸¡ããã¾ãã ã¢ã©ã¤ã¡ã³ãè¦ä»¶ããªãã·ã§ãã«ãª std::align_val_t
弿°ã¨ãã¦æ¸¡ããã¾ãã (C++17以ä¸)
expression ããã«ãã¤ã³ã¿å¤ã«è©ä¾¡ãããå ´åããã¹ãã©ã¯ã¿ã¯å¼ã°ãã¾ããã è§£æ¾é¢æ°ã¯å¼ã°ãããããããªããå¼ã°ããªãããããã¾ãã (æªè¦å®)ã ããããããã©ã«ãã®è§£æ¾é¢æ°ã¯ãã«ãã¤ã³ã¿ã渡ãããã¨ãä½ãããªããã¨ãä¿è¨¼ããã¦ãã¾ãã
expression ã new ã§ç¢ºä¿ããããªãã¸ã§ã¯ãã®åºåºã¯ã©ã¹ã®é¨åãªãã¸ã§ã¯ãã¸ã®ãã¤ã³ã¿ã«è©ä¾¡ãããå ´åããã®åºåºã¯ã©ã¹ã®ãã¹ãã©ã¯ã¿ã¯ virtual ã§ãªããã°ãªãããããã§ãªããã°åä½ã¯æªå®ç¾©ã§ãã
[ç·¨é] ãã¼ã
void ã¸ã®ãã¤ã³ã¿ã¯ãå®å ¨ãªãã¸ã§ã¯ãåã¸ã®ãã¤ã³ã¿ã§ãªãããã delete ã§ãã¾ããã
ãã¼ã¯ã¼ã // delete []{return new int; }(); // ãã¼ã¹ã¨ã©ã¼ delete ([]{return new int; })(); // OK |
(C++11以ä¸) |