c++ - C++中指针初始化

标签 c++ class pointers initialization

<分区>

假设我有一个类 MyClass。现在我想使用另一个名为 Animals 的类,我可能会执行以下操作。

class MyClass
{
public:
    MyClass();
private:
    Animals animals;
};

但是我也可以这样做:

class MyClass
{
public:
    MyClass();
private:
    Animals* animals;
};

然后在构造函数中初始化类:

animals = new Animals();

这两种不同的方法有什么区别,哪个更好,为什么?在我的使用中,Animals 应该只在 MyClass 中使用。我的问题主要是关于性能内存,我的意思是通过指针初始化是否需要更多资源?

最佳答案

如果您考虑如何在类中管理内存,它应该变得清晰。当你声明 Animals animal在你的类(class),那么空间是为animal预留的在你类(class)的内存足迹中。但是当你声明 Animals* animal只有指向 Animal 的指针保留在您类(class)的内存占用中。

两者都不是更好,因为这取决于您的情况。如果你总是要创造一个动物和MyClass拥有它,然后使用第一种方法,因为它只需要一次内存分配。如果animals通常可能是空的并且内存是一个问题,那么您可能想要使用第二种方法。

顺便说一句,如果您使用的是 C++11 或更高版本,您可能需要考虑 std::unique_ptr<Animal>对于第二种情况。

关于c++ - C++中指针初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39232348/

相关文章:

c++ - 试图传入另一个类的枚举

java - 我如何从B类执行A类的run方法

c++ - 什么是 foo*(*)?

c++ - 典型的 CppCMS 内存消耗

c++ - C++中的引用代表对象吗?

c++ - ofstream 泄漏内存

python - 为什么 Python 将类中的数组(以某种方式)视为 "static"?

C 数组指针递增

objective-c - 对于 Objective-C ... 指向方法的指针

c - 取消引用指向不完整类型的指针