class CHoge{
int * hoge;

private:
CHoge::~CHoge( kill());
CHoge::initial( *hoge = new int[1];);
CHoge::kill( delete [] hoge;);
};

void ugu(CHoge fuga){ fuga.hoge[0] ++; };

void main(){
CHoge piyo;
piyo.initial();

piyo.hoge[0] = 10;

ugu(piyo);

cout << piyo.hoge[0];
}

とすると、デストラクターで元のpiyoのhogeもdeleteされてしまいます。
このような場合、どうすればいいのでしょう?