在c++中将对象存储为类中的指针

Store object as pointer in class in C++

本文关键字:指针 对象 c++ 存储      更新时间:2023-10-16

我现在正在学习c++,我想得到一些关于存储成员变量对象的建议。我想在A中存储一个B的实例,最好的方法是什么?

[EDIT] -我使示例更真实。我需要能够在运行时构建和分配纹理,并将其分配给游戏对象。

class GameObject
{
public:
    Texture texture;
};
....
GameObject gameObject;
Texture texture;
gameObject.texture = texture;

class GameObject
{
public:
    Texture *texture;
};
....
GameObject gameObject;
gameObject.texture = new Texture;

我尽量不使用指针,但在某些情况下,我觉得我需要。

如果你想重新定位(引用不同的class B对象)你的成员变量到不同的对象使用指针。如果不行,就用一个对象。

是的,避免指针是一个好主意,如果你需要使用它们,更喜欢智能指针,而不是原始/裸指针。

这实际上取决于您的特定解决方案和需求。两种方式都是可以接受的。在任何语言中,大多数事情都没有"正确的方法",因为你的解决方案决定了事情应该如何做。

虽然有一件事要记住,如果B是一个有许多数据成员的大类,如果不使用指针,它会增加A的大小。此外,如果您确实使用指针,则需要确保执行正确的分配和取消分配,而不是信任用户执行这些操作。

以下是我认为很好的使用标准:

  1. 功能:B是A的一部分还是仅仅与A相关?汽车有发动机,但驾驶员是外部的。另一种看待这个问题的方式是:它们是从一开始就在一起的,还是B被分配给了A?

  2. 构建:在构建A时,B是否完全已知/可定义?

这取决于您是否希望A控制B的内存。

在对象之间来回传递对象时,使用指针是非常有用的。当您决定不使用指针时,重要的是要认识到,一旦对象超出作用域,它的成员变量也会超出作用域。如果指向该对象成员的指针仍然存在,则可能导致问题。

如果这在你的应用程序中不是一个问题,我会避免使用指针。