クラスの動的確保について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sz015

クラスの動的確保について

#1

投稿記事 by sz015 » 9年前

質問させて下さい。
main文にポインタを宣言し、他の関数でnewを行うようにしたいのですが、うまく動作しません。

コード:

#include <iostream>
#include <string>

using namespace std;

/* Class */
class MyClass
{
public:

	int id;
	string name;
};

/* メモリの確保 */
void Class_Init(MyClass* obj)
{
	obj = new MyClass();
}

/* メモリの開放 */
void Class_End(MyClass* obj)
{
	delete obj;
}

/* Main */
int main(void)
{
	MyClass* mc = NULL;

	Class_Init(mc);

	mc->id = 1;
	mc->name = "Yamada Taro";

	Class_End(mc);

	return 0;

}
Class_Init()でnewしたアドレスをmain()に持ってこれないようです。
私の書き方が間違っていると思うのですがどこを変更すればよいのでしょうか。
お教えください、よろしくお願いします。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: クラスの動的確保について

#2

投稿記事 by みけCAT » 9年前

引数はデフォルトではコピーされるので、&を付けて参照にするといいでしょう。

コード:

/* メモリの確保 */
void Class_Init(MyClass*& obj)
{
	obj = new MyClass();
}
戻り値を用いてデータを渡す方法もあります。

コード:

/* メモリの確保 */
MyClass* Class_Init()
{
	return new MyClass();
}

/* Main */
int main(void)
{
	MyClass* mc = Class_Init(mc);

	// 省略
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

sz015

Re: クラスの動的確保について

#3

投稿記事 by sz015 » 9年前

早速の返信ありがとうございます。
アンパサンド(&)をつけたら無事に実行することができました。

しかし、初めて見る形(*&)で少々戸惑っております。
C++は難しいですが、これからも勉強していきたいと思います。
回答ありがとうございました。

閉鎖

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