我想使用malloc,因为它的内存分配发生在O(1)
而不是O(n)
,代码如下:
MyQuickInitArray(int size)
{
A = new T[size];
}
当A的类型为:
时T* A
我认为初始化一个指针数组将需要O(1)
,因为指针是基元,但我检查了一倍,上面的代码实际上size
次到T
的构造函数。如果malloc
或者我缺少的东西可以避免这个问题,那么这个问题会很棒。
答案 0 :(得分:2)
正如您正确指出的那样,new T[n]
会调用构造函数,而malloc()
则不会。
new[]
不适合您。o(n)
复杂性。如果您要查找的是指向T
的数组,则正确的语法如下:
T** A = new T*[size];
这不会调用T
的构造函数。
答案 1 :(得分:1)
我认为初始化一个指针数组将需要O(1)
您没有分配指针数组,而是使用您的代码分配类型为T的对象数组:
T *A = new T[size];
分配你需要的指针数组
typedef T *T_Ptr;
T_Ptr *A = new T_Ptr[size];
我正在使用typedef,因此语法更清晰。
答案 2 :(得分:0)
重载新的
怎么样?void* class_name::operator new(size_t size)
{
cout<<"Allocating memory for object \n";
void *p;
p=malloc(size);
if(p==NULL)
cout<<"Memory allocation error\n\a";
else
return p;
}
对于数组
void* class_name::operator new[](size_t size)
{
cout<<"Allocating array of size "<<size<<endl;
void *p;
p=malloc (size);
if(p==NULL)
{
cout<<"Memory allocation error \n";
}
return p;
}
如何使用:
Class_name *objptr1,*objptr2;
objptr1=new class_name(10);
objptr2=new class_name[10];
答案 3 :(得分:0)
如果为对象分配了空间,可以使用C ++的“placement new”运算符正确初始化它们;在这种情况下,new
不分配内存,但它会调用构造函数。 http://www.cplusplus.com/forum/general/55150/有一个示例,但通常您不希望这样做,您希望将对象分配到程序的非时间关键部分。