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++的现代版本,使用智能指针等应该能消除使用“原始”指针的大部分需求。请解释,指针数组如何减少编译时间。另外,可能值得注意的是,如果使用带有非默认构造函数参数的初始值设定项列表(需要支持当前标准的编译器),则不需要默认构造函数。还值得注意的是,对于指针数组,数组和指针对象组合使用的总内存更高。