0

boost::enable_shared_from_this テンプレートを使用して、2 つのクラス間の mixin を作成しています。したがって、このクラスに新しい機能を追加しています。

class MyOldClass :
        public Connection,
        public boost::enable_shared_from_this<MyOldClass>
{ ... };

以前はこれを通常のクラス (QtObject ではなく、C++ プレーン クラス) で使用しましたが、すべてが機能します。

しかし今、私は QMainWindow で同じことをしており、基本的にクラッシュします:

class MainWindow :
        public QMainWindow,
        public Connection,
        public boost::enable_shared_from_this<MainWindow>
{ Q_OBJECT ... };

QObjectでこれを行うのに問題がある可能性はありますか? なぜこれが起こっているのか分かりません。

ありがとうございました。

4

2 に答える 2

2

shared_ptrを呼び出す前に を作成しないことをコメントで述べましたshared_from_this()。しかし、それが問題です。toが存在する場合にx.shared_from_this()のみ機能します。作成しない場合は、の前提条件に違反しているため、プログラムは未定義の動作をします。shared_ptrxshared_from_this()

shared_from_this()既存の共有ポインターと所有権を共有するポインターを取得するためだけに機能します。最初のものを作成するために使用することはできません。

于 2013-09-10T15:10:46.650 に答える