Предположим, у меня есть класс
class A {
public:
A(int i);
~A();
private:
B b; // Want <- this guy to be constructed with i in A's constructor!
};
. Я хочу, чтобы b конструировался в конструкторе с конкретными параметрами, которые не известны, пока не будет построен A.Если бы я сделал следующее в конструкторе А:
A::A(int i) {
B b(i);
// Or even if I try to do b = B::B(i);
}
Я бы заметил, что b get выделяется дважды в стеке!ахххх.
Затем я обнаружил, что в конструкторе А я могу сделать следующее:
A::A() : b(B::B(7)) {
}
И b выделяется в стеке только один раз!
Но этодовольно неуклюжийУ кого-нибудь есть идея получше?Помните, конструктор должен вызываться только один раз!
Является ли это стандартным способом НЕ-динамического распределения объектов с важными параметрами?Что если мы сможем засунуть конструкцию b в этот причудливый список аргументов !?Вы вынуждены либо динамически распределять, либо создавать ДВАЖДЫ в стеке!
Бонус Вопрос: Когда b освобождается?Это после или прямо перед деструктором А