在采访中被问到.
A* a=new A();A b; A *c=&b;1和2有什么区别?
我在第二个语句中说过,对象是在堆栈和堆栈中创建的.我的朋友说对象总是在堆上创建的.
什么是正确的答案?
你是一种权利-代码的第二块- 假设它出现在函数内部 -将拥有b与c在堆栈上,当然这取决于类型的,虽然A它可能有内部指针堆分配的内存(std::string,std::vector等被例如,如果它们不是空的并且比任何内部缓冲区都大.
也就是说,a它本身也会在第一个块的堆栈中 - 它只是它指向的对象 - 它*a必然在堆上.
换句话说,a并且c实际上等效:基于堆栈的值,但前者是指在堆分配A和第二另一个堆栈分配A....
"堆栈"和"堆"是实现术语.选择#1 A动态分配,选择#2自动完成相同的操作.可能程序最终会使用像堆*这样的动态存储和自动堆栈,但这并不能保证.
但是接受这个术语的松散使用,"对象总是在堆上创建"肯定是不正确的.也许你的朋友在想Java?
*不是数据结构意义上的单词
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |