我想使用 malloc 因为它的内存分配发生在O(1)
而不是O(n)
使用以下代码:
MyQuickInitArray(int size)
{
A = new T[size];
}
当 A 是类型时:
T* A
我认为初始化一个指针数组将需要O(1)
,因为指针是原语,但我加倍检查,上面的代码实际上size
多次传递给T
. 如果可以通过malloc
我缺少的任何一个或某些东西来避免这个问题,那就太好了。
我想使用 malloc 因为它的内存分配发生在O(1)
而不是O(n)
使用以下代码:
MyQuickInitArray(int size)
{
A = new T[size];
}
当 A 是类型时:
T* A
我认为初始化一个指针数组将需要O(1)
,因为指针是原语,但我加倍检查,上面的代码实际上size
多次传递给T
. 如果可以通过malloc
我缺少的任何一个或某些东西来避免这个问题,那就太好了。
正如您正确指出的那样,new T[n]
调用构造函数,而malloc()
没有。
new[]
不适合您。o(n)
复杂性。如果您要查找的是指向 的指针T
数组,则正确的语法如下:
T** A = new T*[size];
这不会调用T
's 的构造函数。
我认为初始化一个指针数组需要 O(1)
您没有分配指针数组,而是使用代码分配 T 类型的对象数组:
T *A = new T[size];
分配你需要的指针数组
typedef T *T_Ptr;
T_Ptr *A = new T_Ptr[size];
我正在使用 typedef,以便语法更清晰。
新的超载怎么办
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];
如果您为对象分配了空间,您可以使用 C++ 的“placement new”运算符正确初始化它们;在这种情况下new
不分配内存,但它会调用构造函数。http://www.cplusplus.com/forum/general/55150/有一个例子,但通常你不想这样做,你想在程序的非时间关键部分分配你的对象。