ページ 1 / 1
make_shared
Posted: 2014年2月27日(木) 23:47
by kiuri
既存の変更の利かないクラスにおいてファクトリーメソッドによってインスタンスを作る構造になっている場合、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!!
};
};
Re: make_shared
Posted: 2014年2月28日(金) 00:05
by h2so5
make_sharedではなくてshared_ptr自体のコンストラクタを呼べばいいのでは?
Re: make_shared
Posted: 2014年2月28日(金) 09:37
by kiuri
shared_ptrのコンストラクタを呼ぶと無駄が多いからmake_sharedを使おう!とよく書かれてあったのでmake_sharedを使おうとしていたのですが、
この場合はあんまり関係ないんでしょうか?
windowの場合は一度で済むのですが、他にも同じような構造になっているクラスを使う必要があるのです…
Re: make_shared
Posted: 2014年2月28日(金) 13:34
by h2so5
ファクトリーメソッドが変更できない以上、make_sharedは使えないので仕様がないですね。
Re: make_shared
Posted: 2014年2月28日(金) 16:47
by kiuri
なるほど、ファクトリーメソッドが変更できないとmake_sharedは使えないのですね…
shared_ptrのコンストラクタを使うことにします