class A;
class B {
public:
B(A& a) : a(a) {}
private:
A& a;
};
/* Method 1 */
/* warning C4355: 'this' : used in base member initializer list */
/*
class A {
public:
A() : b(*this) {}
private:
B b;
};
*/
/* Method 2 */
/* But I need to manually perform memory dellocation. */
class A {
public:
A() { b = new B(*this); }
~A() { delete b; }
private:
B* b;
};
int main() {
}
В настоящее время, когда я пытаюсь инициализировать ссылку в B, я использую метод 1. Однако метод 1 укажет мне предупреждение, которое понятно.
Следовательно, я должен отказаться от использования метода 2, используя динамическое распределение памяти.
Есть ли какой-либо лучший способ, который я могу использовать, без необходимости ручного распределения памяти /dellocation (ОК. Я знаю умный указатель)?
Я предпочитаю метод 1, просто мне не нравится это предупреждение.