这两个类初始值设定项有什么区别?
myClass myObject;
myClass *myPointer1;
myPointer1 = &myObject;
和
myClass *myPointer2 = new myClass;
如果第一个指针只是一个指向类对象的指针,那么第二个指针指向哪里?
答案 0 :(得分:1)
myPointer1
指向具有自动存储持续时间的对象。因此,myPointer1
不拥有它指向的对象,而只是一种访问该对象的方法。另一方面,myPointer2
指向具有动态存储持续时间的对象,并且不仅myPointer2
用于访问对象,而且还需要在以后使用delete
对象为了避免内存泄漏。
有人经常说myPointer1
指向"堆栈"而myPointer2
指向"堆",分别反映了自动和动态存储持续时间的常见实施策略。
您无法通过检查其值来判断指针是指向自动存储持续时间的对象还是指向动态存储持续时间的对象。您应该使用智能指针对象(std::unique_ptr<myClass>
等)以避免内存泄漏。