Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;,对象数组与指向这些对象的指针数组 考虑一个名为 A/St>的C++类。使用对象数组有哪些优点/缺点: std::array<A, 10> std::数组_C++_Arrays_Pointers - Fatal编程技术网

C++;,对象数组与指向这些对象的指针数组 考虑一个名为 A/St>的C++类。使用对象数组有哪些优点/缺点: std::array<A, 10> std::数组

C++;,对象数组与指向这些对象的指针数组 考虑一个名为 A/St>的C++类。使用对象数组有哪些优点/缺点: std::array<A, 10> std::数组,c++,arrays,pointers,C++,Arrays,Pointers,而不是指针数组: std::array<A*, 10> std::数组 以下是重要的区别: 对象数组: std::array<A, 10> 对象的内存由std::array管理 对象存储在连续内存中(缓存效率高) 所有对象都属于同一类型 所有对象都存在 指定元素将生成对象的副本 指针数组: std::array<A*, 10> 指向的对象的内存不由包含指针的std::array管理 您可以存储指向多态类型公共基的指针 指针可以有nullptr值,即

而不是指针数组:

std::array<A*, 10>
std::数组
以下是重要的区别:

对象数组:

std::array<A, 10>
  • 对象的内存由
    std::array
    管理
  • 对象存储在连续内存中(缓存效率高)
  • 所有对象都属于同一类型
  • 所有对象都存在
  • 指定元素将生成对象的副本
指针数组:

std::array<A*, 10>
  • 指向的对象的内存不由包含指针的
    std::array
    管理
  • 您可以存储指向多态类型公共基的指针
  • 指针可以有
    nullptr
    值,即不指向任何对象
  • 指定元素不会复制指向的对象
这些东西是赞成还是反对取决于您的用例


现在来看基于观点的部分,作为对初学者的提示:在我看来,内存由数组管理的事实清楚地表明数组“拥有”对象。通常不清楚谁拥有指针指向的对象。所有权的清晰性,加上缓存效率(这通常是一个额外的优势),使得对象数组在您不确定时成为一个不错的默认选择。尽可能使用数组中的对象,必要时使用指针。当您需要指针时,请考虑<代码> STD::UnQuyPPTR <代码>是否合适。

< P>如果您不想使用STL数组,可以使用自己的数组

。 1) 数组[10]

2) A*数组[10]

对于#1,类A必须具有默认构造函数

    A needs more memory to hold object

    Whenever you assigned an object to any index of the array, copy constructor gets called

    Compilation time required is more
对于#2,不需要构造函数

   sizeof(array) = size of pointer * 10

   compilation time required is less

   There is no need of default constructor or copy constructor

你喜欢苹果还是桔子?这完全取决于你想做什么,它们完全不同。你觉得呢?如果你要从java到C++,我建议你阅读一个关于指针的教程。这可能会澄清这样的问题。SkaJasururu我刚刚读完了关于C++中指针和数组的章节,我脑子里有这个基本问题。在java上,我找不到任何答案(或者至少我不能正确地使用谷歌),一个使用代码< >新< /代码>的频率越来越低,而且用C++的现代版本,使用智能指针等应该能消除使用“原始”指针的大部分需求。请解释,指针数组如何减少编译时间。另外,可能值得注意的是,如果使用带有非默认构造函数参数的初始值设定项列表(需要支持当前标准的编译器),则不需要默认构造函数。还值得注意的是,对于指针数组,数组和指针对象组合使用的总内存更高。