0

これは、同じ親クラス c++ から継承されたさまざまなオブジェクトを格納するためのベクトルの使用のフォローアップですが、理解するために読む必要はありません。

多項式クラスと、コンテナー クラスである別のクラスがあります。コンテナー クラスには、多項式へのポインターを保持するベクトルがあります。vectorPolynomial を次のように定義しました。

std::vector<std::unique_ptr<Polynomial>> vectorPolynomial;

多項式クラスには、2 つの多項式を取り、多項式そのものである結果を返す演算を行う二項演算子があります。

ポリモーフィズムの前に、オペレーターは Polynomial 型のオブジェクトを返しました。

Polynomial polynomialresult = polynomial1 % polynomial2;
vectorPolynomial.push_back(polynomialresult);

ベクトルはもはや多項式のベクトルではないため、これは機能しません。これが私が試したものです:

std::unique_ptr<Polynomial> result(new Polynomial);
*result = *(vectorPolynomial[i]) % *(vectorPolynomial[j]);
vectorPolynomial.emplace_back(result);

これはうまくいきませんでした。私も試しました:

Polynomial * result = new Polynomial;

unique_ptr の代わりに使用しましたが、どちらも機能しませんでした。emplace_back の代わりに push_back も機能しません。

これは通常どのように行われますか?

4

2 に答える 2

4

unique_ptrコピー コンストラクタはありません。したがって、移動する必要があります。

vectorPolynomial.emplace_back(std::move(result));
于 2013-04-15T19:31:14.790 に答える
1

あなたのコードに対するベンジャミンの修正はうまくいきますが、私はそれが少し遅れていると感じています。結局のところ、unique_ptr正当な理由でコピー コンストラクターがありません。コードは、ポインターではなく通常のオブジェクトを使用することでメリットが得られます。

Polynomial polynomialresult = *vectorPolynomial[i] % *vectorPolynomial[j];
vectorPolynomial.emplace_back(new Polynomial(polynomialresult));

ここでは、実際に必要なときにのみ手動でメモリを割り当てます。

于 2013-04-15T19:37:15.757 に答える