make_shared

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

make_shared

#1

投稿記事 by kiuri » 11年前

既存の変更の利かないクラスにおいてファクトリーメソッドによってインスタンスを作る構造になっている場合、make_sharedに落とし込むにはどのようにすればいいでしょうか?

コード:

class Window{
	private:
		shared_ptr<SDL_Window> window;
	public:
		Window(){
			window = make_shared<SDL_Window>(SDL_CreateWindow("test", 0, 0, 100, 100, SDL_WINDOW_SHOWN));//Error!!
		};
};

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: make_shared

#2

投稿記事 by h2so5 » 11年前

make_sharedではなくてshared_ptr自体のコンストラクタを呼べばいいのでは?

kiuri
記事: 20
登録日時: 12年前

Re: make_shared

#3

投稿記事 by kiuri » 11年前

shared_ptrのコンストラクタを呼ぶと無駄が多いからmake_sharedを使おう!とよく書かれてあったのでmake_sharedを使おうとしていたのですが、
この場合はあんまり関係ないんでしょうか?
windowの場合は一度で済むのですが、他にも同じような構造になっているクラスを使う必要があるのです…

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: make_shared

#4

投稿記事 by h2so5 » 11年前

ファクトリーメソッドが変更できない以上、make_sharedは使えないので仕様がないですね。

kiuri
記事: 20
登録日時: 12年前

Re: make_shared

#5

投稿記事 by kiuri » 11年前

なるほど、ファクトリーメソッドが変更できないとmake_sharedは使えないのですね…
shared_ptrのコンストラクタを使うことにします

閉鎖

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