クラスに共有ptrを作成するときに、クラスデストラクタが2回コールされる問題があります。shared_ptrを作成するときにクラスデストラクターが2回呼び出される
私はオブジェクトのベクトルを作成しようとしており、各オブジェクトにはコンストラクタとデストラクタがあります。
私のような呼び出しを行うと:
サーボコントローラのコンストラクタが呼び出された後、すぐにサーボコントローラのためのデストラクタが一back機能も呼ばれるその前に、呼ばれstd::vector<std::shared_ptr<ServoController>> servos;
bool CreateServo(int id)
{
std::shared_ptr<ServoController> servo = std::make_shared<ServoController>(ServoController(id));
servos.push_back(servo);
}
。
次に、アプリケーションを閉じると、ServoControllerのデストラクタが再度呼び出されます。しかし、コンストラクタはと今まではと呼ばれていました(私はベクトルに1つのオブジェクトしか持っていません)。少なくともコンストラクタを再び実行させるべきではありませんか?
私のクラスのベクトルを作る方法はありますか?ベクトル内の各オブジェクトについては、コンストラクタを一度呼び出す必要があり、オブジェクトがベクトルまたはベクトルから削除されるとデストラクタを一度呼び出す必要があります破壊されていますか?
おかげで、 -D
コピーコンストラクタではなく、呼び出された移動コンストラクタであった可能性があります。 –