ページ 11

c++の引数について

Posted: 2014年4月09日(水) 18:21
by haruharu
c++の関数の引数について質問があります。

例えばjavaなら

コード:

void hoge(Point p)
{
        ;
}

hoge(new Point(0, 0));
というふうに引数のところで直接宣言しても問題は起こりませんが
c++でこれをするとメモリリークになってしまいます。
テンポラリ変数を作る以外に何か簡単にできる方法はないでしょうか?

Re: c++の引数について

Posted: 2014年4月09日(水) 21:47
by みけCAT
このコードでメモリリークになるのですか?

コード:

#include <cstdio>

class Point {
	int x,y;
	public:
		Point():x(0),y(0){};
		Point(int sx,int sy):x(sx),y(sy){};
		void print() const { printf("(%d,%d)\n",x,y); }
};

// コピーが発生する
void hoge(Point p) {
	p.print();
}

// コピーは発生しない
void hoge2(const Point& p) {
	p.print();
}

int main() {
	hoge(Point(3,5));
	hoge2(Point(5,7));
	return 0;
}

Re: c++の引数について

Posted: 2014年4月09日(水) 22:30
by haruharu
C++ではnewを使わないでもインスタンスを作れるのですね。
今まではわざわざテンポラリ変数を作ってから渡していました(笑)
わかりやすい解説をありがとうございました。