オブジェクトをに渡して、キューを持つスレッド間で値を渡そうとしています。スレッド間でオブジェクトを値渡しします
複数の異なるオブジェクトが存在するため、抽象クラスを作成しました。
class message
{
public :
virtual ~message(){};
};
その後、私は、メッセージ
class a_specific_message : public message
{
...
};
のそれぞれ異なるタイプのサブクラスを持っている私は、キューを実装するためのthis tutorialを読んで、私は次のようにそれを呼び出す:
concurrent_queue<message> queue;
a_specific_message m{1, 2, 3};
queue.push(m);
私の問題がありますキューがメッセージをクローンできるようにoperator=
を上書きする必要があることを確認してください。
popped_value=the_queue.front();
仮想演算子を追加しようとしましたが、サブクラスで呼び出されません。
オブジェクトを参照渡しすることなく、このようなことをどのように達成できるかわかりません。
'concurrent_queue'は 'message'型の**オブジェクト**を保持します。派生型のオブジェクトをキューにプッシュすると、オブジェクトはスライスされ、格納されているものはすべてその 'message'部分です。元のオブジェクトを元に戻す方法はありません。参照またはポインタを保持するキューが必要です。 –
@PeteBecker私はこれが起こることを恐れていました。他のスレッドがオブジェクトを削除したことを確認するにはどうすればいいですか? – Marc
'shared_ptr'(スレッドセーフです)のような音です。 – Donnie