スマートポインタ関連使ってみたり

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

スマートポインタ関連使ってみたり

投稿記事 by もるも » 6年前

スマートポインタの有効な使い道をいまだに理解できずにとりあえず使ってみる。
(きっとメモリリークに苦しむレベルになるまで進まないと分からないんだろうな(´・ω・`))
とりあえず、いろんなクラスに渡すオブジェクトをshare_ptrにしてみたり。
テンプレートが使われてるやつはエラーが分かりづらい(;^ω^)
ちゃんと出力読めばわかるんだけども、大量の行のエラーで攻めてくるし。
make_sharedとかコンストラクタの引数の型の順番間違えても赤線引いてくれないし(;´・ω・)
まぁVisualStudioが優秀だからなんとかなってる感。
ヘッダファイルも小分けせず関連したものはまとめて宣言したほうがいいということが本に書いてあって試してみたら、
こんなクラスねぇよっていうエラーが消えてよかった。こういうのも赤線でないから困る(><)
マメにインクルードすりゃいいってもんじゃないから難しい。

アバター
usao
記事: 1889
登録日時: 12年前

Re: スマートポインタ関連使ってみたり

投稿記事 by usao » 6年前

スマポはこういうのでエラー食らって,しばらく「???」ってなるから困る.

CODE:

class MyClass
{
public:
  unique_ptr<MyClass> Create( ... )
  {
     ...
     return make_unique<MyClass>( a );  //ここでエラー^^
  }
private: //コンストラクタはprivate
  MyClass( int a ){}
};
C#の参照型って,全部強制的にshared_ptr使わされるみたいな勢いですよね.
C#さわりはじめたとき 「これ循環参照したら死ぬの?」 と不安にかられました.
(どうやらC#のGCは参照カウント方式ではないから大丈夫らしい.)

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

Re: スマートポインタ関連使ってみたり

投稿記事 by もるも » 6年前

ほんとだ、アクセスできないって言われる(;^ω^)?
プライベートなコンストラクタはシングルトンのパターンぐらいでしかみたことないからよく分からない・・・Σ( ̄ロ ̄lll)

C#の参照型では参照渡しと複製の違いを理解してなくて悩んだなぁ。
そんなレベルだから循環参照の心配まで気が回らず(´・ω・`)

アバター
usao
記事: 1889
登録日時: 12年前

Re: スマートポインタ関連使ってみたり

投稿記事 by usao » 6年前

MyClassのコンストラクタがprivateだから
アクセスできないのはエラー食らってみれば当然の話なんだけども,
じゃあこれってどうすべきなんだろう?

まぁmake_uniqueとか使わずにその場(Create()内)でnewしたものを返せばエラーは即無くなるんだけども,
せっかく存在しているmake_uniqueとかいうのを使いたいじゃん,っていう…

アバター
usao
記事: 1889
登録日時: 12年前

Re: スマートポインタ関連使ってみたり

投稿記事 by usao » 6年前

> ヘッダファイルも小分けせず関連したものはまとめて宣言したほうがいい

個人的には,そこそこバラけた形で書くスタイル.
最初は「こんなん,一個のヘッダっしょ」とか思ってても,後からその一部だけをincludeしたくなるという経験が割とあるので.

最初からばらけているのをくっつけるのは簡単だけど,
逆に1個になっちゃってるのをバラすのは面倒.

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

Re: スマートポインタ関連使ってみたり

投稿記事 by もるも » 6年前

インクルードガードですべて解決できればいいんですけどねぇ・・・。
私が作ってるのはレトロ風ゲームで、シンプルなオブジェクトの使いまわしばっかりだから個別にするかどうかあまり気にならないのかも。

アバター
いわん
記事: 32
登録日時: 9年前

Re: スマートポインタ関連使ってみたり

投稿記事 by いわん » 6年前

スマートポインタとか使ったことないです(^^;
テンプレートがC++を難解にしてる一因かも。

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

Re: スマートポインタ関連使ってみたり

投稿記事 by もるも » 6年前

いろんな流派がありますね( ´艸`)