在c ++中通过指针初始化

dal*_*t97 2 c++ pointers initialization class

所以,假设我有一堂课MyClass.现在我想使用另一个叫做的类Animals,我可能会做以下事情.

class MyClass
{
public:
    MyClass();
private:
    Animals animals;
};
Run Code Online (Sandbox Code Playgroud)

不过我也可以这样做:

class MyClass
{
public:
    MyClass();
private:
    Animals* animals;
};
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令在构造函数中初始化类:

animals = new Animals();
Run Code Online (Sandbox Code Playgroud)

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

kei*_*ith 5

如果你考虑如何在一个类中管理内存,它应该变得清晰.Animals animal在类中声明时,会在类animal的内存占用空间中保留空间.但是当你声明Animals* animal只有一个指针指向Animal你的类的内存占用时.

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

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