は、次のコードを検討してください。クラスCのコンストラクタをメンバ変数よりも早く呼び出す方法があれば問題になるでしょうか? タクシーのと解体私はクラスの道最初のコンストラクタは、メンバ変数、その後に呼び出される順序を変更することができる方法BACクラス内のメンバ変数より早くコンストラクタを呼び出すことができますか? 私はあなたがクラスCのオブジェクトを作成するときに最初のメンバ変数は、建設の順序は<strong><em>ABC</em></strong>と解体<strong><em>CBA</em></strong>になり、その後構築されることを知っている:
の注文を持っています。
#include <iostream>
#include <exception>
class A {
public:
A() {
std::cout << 'a';
}
~A() { std::cout << 'A'; }
};
class B {
public:
B() { std::cout << 'b'; }
~B() { std::cout << 'B'; }
};
class C {
public:
C() {
std::cout << 'c';
}
~C() { std::cout << 'C'; }
A m_a ;
B m_b;
};
void foo() { C c; }
int main() {
try {
foo();
}
catch (std::exception &) {
std::cout << "catch";
}
}
を確保します。しかし、あなたの元の問題に対する解決策がまだあるかもしれません - あなたはその「初期建設」の中で何をしますか?それには何が必要ですか? – Quentin
できません。メンバをダイナミックなスマートポインタにして、 'C :: C()'の本体の中でそれらを初期化することができます(これは本当にお勧めできません)。それを超えると、オプションは指定されたコードにはほとんど存在しません。私はあなたが言語そのものの機能を回避しようとする理由があると確信しています(オブジェクトが完全に構築されるまでオブジェクトは機能構築を開始できません)。しかしこれは[XY問題]の強い香りですmeta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 – WhozCraig