我想使用struct
来定义变量
最好使用struct作为pointer
或no pointer
?
例如它是我的结构:
struct mystruct {
//data members
double x, y, z;
}
我在下面的代码中使用它:
void main() {
mystruct s1; //form 1
mystruct * s2 = new mystruct; //form 2
//.....
}
哪个变量定义更好用? s1或s2?
答案 0 :(得分:1)
我个人尽量避免使用指针并动态分配内存。
有关此前的讨论,请参阅Are pointers bad?
答案 1 :(得分:1)
如果有效,使用对象(即不是指针)总是更好。
使用对象比使用指针和从堆中分配内存要快。
使用对象会产生更少,更清晰的代码行。
使用对象可以避免在不需要内存时需要释放内存的问题。
答案 2 :(得分:1)
除非您有特定的理由使用指针(例如,如果您正在创建此结构的一堆实例并将指针存储在向量中),通常最好不要这样做。
这有几个原因:
一般来说,我更喜欢在堆栈上使用对象而不是指向对象的指针,如果没有其他原因,不要因为不必担心这些事情而让自己更容易。
关于类(对于类和结构体)的(明显删除的)注释,它们基本上完全相同。它们在语法上略有不同(例如,默认情况下,类的成员是私有的,而结构的成员默认是公共的),但据我所知,没有真正的区别。另外,指针并不关心它指向的是什么类型的东西;它本质上只是两个数字:内存中的位置,以及该位置处物体的预期大小。
答案 3 :(得分:1)
void main() { mystruct s1; //form 1 mystruct * s2 = new mystruct; //form 2 //..... }
哪个变量定义更好用? s1或s2?
s1
。
在C ++中,只有在必须时才使用指针和动态内存分配。如果你没有从这些功能中获得任何好处,那么你只会留下它们的缺点。
手动new
/ delete
和智能指针(如std::unique_ptr
或std::shared_ptr
)将面临一些不利之处:
nullptr
完整性检查。 std::shared_ptr
的特殊劣势:
您只会遇到手动new
/ delete
:
nullptr
完整性检查的必要性。一些参考文献:
如果您还
new
,则无需使用delete
来创建对象 对象在同一范围内;这样的对象应该是局部变量。
始终使用标准智能指针和非拥有原始指针。 永远不要使用拥有原始指针和删除,除非在极少数情况下 实现自己的低级数据结构(甚至保持 很好地封装在类边界内。)
P.S。:void main
不是合法的C ++。设为int main
。