过去几天我一直在研究这个问题,到目前为止,除了教条论点或对传统的诉求之外,我还没有真正找到任何令人信服的东西(即"它是C++方式!").
如果我正在创建一个对象数组,使用时有什么令人信服的理由(除了易用性):
#define MY_ARRAY_SIZE 10
// ...
my_object * my_array=new my_object [MY_ARRAY_SIZE];
for (int i=0;i<MY_ARRAY_SIZE;++i) my_array[i]=my_object(i);
Run Code Online (Sandbox Code Playgroud)
过度
#define MEMORY_ERROR -1
#define MY_ARRAY_SIZE 10
// ...
my_object * my_array=(my_object *)malloc(sizeof(my_object)*MY_ARRAY_SIZE);
if (my_object==NULL) throw MEMORY_ERROR;
for (int i=0;i<MY_ARRAY_SIZE;++i) new (my_array+i) my_object (i);
Run Code Online (Sandbox Code Playgroud)
据我所知,后者比前者更有效(因为你没有不必要地将内存初始化为一些非随机值/调用默认构造函数),唯一的区别就在于你清理了一个:
delete [] my_array;
Run Code Online (Sandbox Code Playgroud)
另一个你清理:
for (int i=0;i<MY_ARRAY_SIZE;++i) my_array[i].~T();
free(my_array);
Run Code Online (Sandbox Code Playgroud)
我出于一个令人信服的理由.上诉的事实,这是C++(不是C),因此malloc
而free
不应使用不-据我可以告诉- 引人注目的一样,因为它是教条主义.是否有一些我缺少的东西new []
优于malloc
?
我的意思是,就我所知,你根本不能使用new []
- 根本没有 - 创建一个没有默认的无参数构造函数的数组,而这个malloc
方法可以这样使用.