#include "stdafx.h"
#include <memory>
using namespace std;
class MyClass1
{
public:
MyClass1(int a, int b, int c, int d) :data1(a), data2(b), data3(c), data4(d) {}
~MyClass1() = default;
private:
int data1;
int data2;
int data3;
int data4;
};
class MyClass2
{
public:
MyClass2(int a, int b, int c, int d) :data1(a), data2(new int(b)), data3(make_shared<int>(c)), data4(make_unique<int>(d)) {}
~MyClass2() { delete data2; }
private:
int data1;
int* data2;
shared_ptr<int> data3;
unique_ptr<int> data4;
};
int main()
{
MyClass1 mc1automatic(1, 2, 3, 4); // Case 1 : Every integer allocated on stack
MyClass2 mc2automatic(1, 2, 3, 4); // Case 2 : Every integer except data1 allocated on heap
unique_ptr<MyClass1> mc1dynamic = make_unique<MyClass1>(1, 2, 3, 4); // Case 3 : Every integer allocated on heap
unique_ptr<MyClass2> mc2dynamic = make_unique<MyClass2>(1, 2, 3, 4); // Case 4 : Every integer allocated on heap
return 0;
}
В этом примере объект, на который указывают и mc1dynamic, и mc2dynamic, динамически распределяет членов своего класса (Каждые данные в MyClass1 и data1 в MyClass2), несмотря на то, что план объявляет их как автоматические переменные.
Если я точно знаю, что объект (MyClass1, в данном случае MyClass2) будет размещен динамически, почему я бы выбрал динамическое объявление членов класса, как я это делал в MyClass2?