PHPUnit: утверждают, что два массива равны, но порядок элементов не важен

Деструктор A будет работать, когда закончится его время жизни. Если вы хотите освободить память и запустить деструктор, вы должны удалить ее, если она была выделена в куче. Если он был выделен в стеке, это происходит автоматически (т. Е. Когда оно выходит за пределы области видимости, см. Раздел RAII). Если это член класса (не указатель, а полный член), то это произойдет, когда содержащийся объект будет уничтожен.

class A
{
    char *someHeapMemory;
public:
    A() : someHeapMemory(new char[1000]) {}
    ~A() { delete[] someHeapMemory; }
};

class B
{
    A* APtr;
public:
    B() : APtr(new A()) {}
    ~B() { delete APtr; }
};

class C
{
    A Amember;
public:
    C() : Amember() {}
    ~C() {} // A is freed / destructed automatically.
};

int main()
{
    B* BPtr = new B();
    delete BPtr; // Calls ~B() which calls ~A() 
    C *CPtr = new C();
    delete CPtr;
    B b;
    C c;
} // b and c are freed/destructed automatically

В приведенном выше примере каждое удаление и удаление [ ] необходим. И никакое удаление не требуется (или действительно может быть использовано), где я его не использовал.

auto_ptr, unique_ptr и shared_ptr и т. Д. ... отлично подходят для такого управления жизненным циклом проще:

class A
{
    shared_array<char> someHeapMemory;
public:
    A() : someHeapMemory(new char[1000]) {}
    ~A() { } // someHeapMemory is delete[]d automatically
};

class B
{
    shared_ptr<A> APtr;
public:
    B() : APtr(new A()) {}
    ~B() {  } // APtr is deleted automatically
};

int main()
{
    shared_ptr<B> BPtr = new B();
} // BPtr is deleted automatically
119
задан Valentin Despa 16 November 2013 в 11:03
поделиться