[C++]std::make_sharedとアップキャスト

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
moba
記事: 82
登録日時: 8年前

[C++]std::make_sharedとアップキャスト

#1

投稿記事 by moba » 8年前

お世話になります_(._.)_

Visual C++ 2010 Expressで次のように書きました。
コンパイルエラーの理由を教えていただけませんか。

コード:

#include <memory>

class Base
{
public:
	virtual void Update() = 0;
	virtual ~Base() {}
};

class Derived : public Base
{
	void Update(){}
};

void Test() {
	std::shared_ptr<Base> testA = std::make_shared<Derived>(); // エラーなし
	auto testB = std::make_shared<Base>( Derived() ); // error C2259: 'Base' : 抽象クラスをインスタンス化できません。
}
エラー文の続きは、

error C2259: 'Base' : 抽象クラスをインスタンス化できません。
次のメンバーが原因です:
'void Base::Update(void)' : は抽象型です0

です。よろしくお願いします。

アバター
a5ua
記事: 199
登録日時: 13年前

Re: [C++]std::make_sharedとアップキャスト

#2

投稿記事 by a5ua » 8年前

std::make_shared<Base>(...); は内部で
new Base(...); 相当のことを実行しています。

純粋仮想関数を含むクラスのインスタンスを
生成することはできないので、そのようなエラーが出ているのでしょう

moba
記事: 82
登録日時: 8年前

Re: [C++]std::make_sharedとアップキャスト

#3

投稿記事 by moba » 8年前

ではこのケースでは、具体的に
std::make_shared<Base>( Derived() )
はどのように実行されますか。

閉鎖

“C言語何でも質問掲示板” へ戻る