下面程序的行为是未定义的。至少,stringArray指向的100个string对象中有99个不太可能被正确地析构。
 被delete的指针指向单个对象还是一个对象数组?内存数组通常包括数组的大小,delete可以知道需要调用多少个析构函数。
 
 使用delete时使用了方括号,delete假定指向的是一个数组。否则,它假定指向一个对象。
std::string *stringPtr1 = new std::string;
std::string *stringPtr2 = new std::string[100];
...
delete stringPtr1; 	// delete 一个对象
delete [] stringPtr2; // delete 一个对象数组
 
对于喜欢使用宏typedef的人来说,这条规则也值得注意,因为它意味着当使用new来生成typedef类型的对象时,必须说明应该使用哪种形式的delete。例如,考虑下面的typedef:
typedef std::string AddressLines[4]; // 一个人的地址有4行字符串,
 std::string *pal = new AddressLines; // 注意“new AddressLines”返回string*
 					  // 就像"new string[4]"一样
 delete pal; 		// 未定义的!
delete [] pal; 	// 可以
 
为了避免这种混淆,请避免对数组类型使用typedef,可以使用vector替代。
- 如果在new表达式中使用[],则在相应的delete表达式中必须使用[]。
 - 如果在new表达式中不使用[],那么在相应的delete表达式中也不能使用[]。
 







![【算法每日一练]-dfs bfs(保姆级教程 篇8 )#01迷宫 #血色先锋队 #求先序排列 #取数游戏 #数的划分](https://img-blog.csdnimg.cn/direct/b9dd8791346b497db2e12195a5584b04.png)
![[Android]RadioButton控件](https://img-blog.csdnimg.cn/3327391eaf3b49b58456e262120fcac3.png)










