1.
Dog dog1;
a,这种方式创建的对象是在栈内存上分配空间。栈内存由操作系统自动管理,它的分配和释放都非常快。当程序执行到该对象的作用域结束时(例如,函数执行完毕或者代码块结束),操作系统会自动回收该对象所占用的内存。
b,对象的生命周期与其所在的作用域相关。
c,使用对象名直接访问其成员,使用 . 运算符。
d, 栈上分配内存速度快,因为栈的内存分配是连续的,只需要移动栈指针即可完成分配和释放。
2.
Dog *dog2 = new Dog;
delete dog2;
a .使用 new
关键字创建的对象是在堆内存上分配空间。堆内存的管理相对复杂,需要程序员手动进行内存的分配和释放。使用 new
分配的内存,直到使用 delete
手动释放或者程序结束才会被回收。
b .对象的生命周期由程序员控制。使用 new 分配的内存,需要使用 delete 来手动释放,否则会造成内存泄漏。
c. 使用指针访问对象的成员,使用 ->
运算符。
d .堆上分配内存相对较慢,因为堆内存的分配需要操作系统进行复杂的内存管理,可能会涉及到内存碎片的问题。