std::auto_ptrと不完全クラス

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

std::auto_ptrと不完全クラス

#1

投稿記事 by YYSS » 7年前

メンバ変数にstd::auto_ptrを使用し、ソースファイルの依存性を下げるために前方宣言だけで定義するようにしたのですが、
警告が出てしまいます・・・


warning C4150: 'C_Drawer' 型を削除するため delete 演算子が呼び出されましたが、定義がありません。


ソースは以下の通り

コード:

class	C_Drawer;

class C_ItemObj{

private:
	bool	m_Flag;
	const	std::auto_ptr< C_Drawer >		mc_Drawer;

	void	MoveProcess();
	void	CheckOverArea();
	void	FadeProcess();		//	回収された場合
	
public:
	C_ItemObj();

	//	初期化
	void	Init();

	//	生成時の初期化
	void	CreateInit( double x, double y, double ang, double sp, int color );

};
class C_Drawer; の変わりにヘッダーのインクルードをしてあげれば警告は消えるのですが、
ヘッダーの依存性が高まってしまいます。

ヘッダー内での別のヘッダーファイルのインクルードをあまりしたくないという、私の変な考えがいけないのかもしれませんが;;
依存性が低まれば、コンパイル時間が短くできるので、ただそれだけの理由なのですが;;


普通のポインタを使えば解決されるのですが、メモリリーク等を考えるとstd::auto_ptrを使いたいので、
解決法が分かる方はアドバイスを下さると幸いです。

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

Re: std::auto_ptrと不完全クラス

#2

投稿記事 by h2so5 » 7年前

ここで同じ問題について解説されています。
http://www.akamoz.jp/you/uni/templ-dtor.htm

Suikaba
記事: 194
登録日時: 9年前

Re: std::auto_ptrと不完全クラス

#3

投稿記事 by Suikaba » 7年前

あと、std::auto_ptrはdeprecatedなので、使える環境ならstd::unique_ptr使いましょう。

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

Re: std::auto_ptrと不完全クラス

#4

投稿記事 by YYSS » 7年前

返答ありがとうございます。

調べたら、標準のshared_ptrを使えば動的削除子によって、
一切気にする必要がないということなのでそちらを利用したら解決しました。
http://site.oukasei.com/?p=139


あと、auto_ptrはdeprecatedというのは知りませんでした;;
Effective C++には書かれていなかったので、そのまま使おうとしていました;;
ご指摘ありがとうございます。

閉鎖

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