c++ new 和allocator

//c++提供了两种一次分配一个对象数组的方法。
//①new,可以分配并初始化一个对象数组。
//②标准库包含一个名为allocator的类,允许我们将分配和初始化进行分离。使用allocator通常会提供
//更好的性能和更灵活的内存管理能力。
//当一个应用需要可变数量的对象时
//大多数应用应该使用标准库容器而不是动态分配的数组。使用容器更为简单、更不容易出现内存管理错误并且具有更好的性能。
#include
#include
using namespace std;
int main()
{
	int *p = new int[42];//new分配一个int数组,并返回第一个int 的指针
	//因为分配的内存并不是一个数组类型,因此不能对动态数组调用begin()或end()出于相同的原因,也不能用for语句来处理动态数组中的元素。
	//默认情况下,new分配的对象,不管是单个分配的还是数组中的,都是默认初始化的。
	//可以对数组中的元素进行值初始化,方法是在大小之后跟一对空括号。
	int *pia = new int[10];
	int *pia2 = new int[10]();
	string *psa = new string[10];
	string *psa2 = new string[10]();
	//在新标准中,我们还可以提供一个元素初始化器的花括号列表:
	int *pia3 = new int[10]{ 0,1,2,3,4,5,6,7,8,9 };
	string *psa3 = new string[10]{ "a","an","the",string(3,'x') };
	//cout << string(3, 'x');
	//与内置数组对象的列表初始化一样,初始化器会用来初始化动态数组中开始部分的元素。如果初始化器数目小于元素数目,
	//剩余元素将进行值初始化。如果初始化器数目大于元素数目,则new表达式失败,不会分配任何内存。
	char *cp = new char[0];
	//当我们用new分配一个大小为0的数组时,new返回一个合法的空指针。
	//为了释放动态数组,我们使用一种特殊形式的delete-在指针前加上一个空方括号对
	delete[]p;
	//销毁p指向的数组中的元素,并释放相应的内存。数组中的元素按逆序销毁,即最后一个元素首先被销毁,然后是倒数第二个,以此类推。

	return 0;
}

 

你可能感兴趣的:(c++)