c++ - 作为对象的类成员 - 指针与否? C++

标签 c++ memory pointers class-design member

如果我创建了一个类 MyClass 并且它有一些私有(private)成员说 MyOtherClass,是否将 MyOtherClass 设为指针更好?就它在内存中的存储位置而言,将它作为不是指针意味着什么?创建类的时候会创建对象吗?

我注意到 QT 中的示例通常在类成员为类时将类成员声明为指针。

最佳答案

If I create a class MyClass and it has some private member say MyOtherClass, is it better to make MyOtherClass a pointer or not?

你通常应该在你的类中将它声明为一个值。它将是本地的,出错的机会更少,分配更少 - 最终可能出错的事情更少,并且编译器总是可以知道它在指定的偏移量处,所以......它有助于优化和二进制减少几个级别。在某些情况下,您知道必须处理指针(即多态、共享、需要重新分配),通常最好仅在必要时使用指针 - 尤其是当它是私有(private)/封装时。

What does it mean also to have it as not a pointer in terms of where it is stored in memory?

它的地址将接近(或等于)this——gcc(例如)有一些高级选项来转储类数据(大小、vtables、偏移量)

Will the object be created when the class is created?

是的 - MyClass 的大小将增加 sizeof(MyOtherClass),或者如果编译器重新对齐它(例如,使其自然对齐)则更多

关于c++ - 作为对象的类成员 - 指针与否? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3871429/

相关文章:

c++ - 让 Windows 让我映射 1 GB 的虚拟内存

linux - Linux 中的信号量和共享内存

c - C中数组的指针

c++ - 删除作为公共(public)类成员的指针

c++ - 程序在返回 0 后收到 SIGSEGV 错误

c++ - 将成员函数从 C++ CLI 传递到 native C 回调

c++ - 如何合并、拆分和查询第 k 个排序列表?

Calloc() 正在分配先前分配的内存

iPhone 内存,该相信什么?

C和64位指针计算