2010-12-12 22 views
0

なぜこのコードのクラッシュは、Array<int>のためのコピーコンストラクタは何をするのか、私はC++運転、過負荷、クラッシュ

ostream& operator<<(ostream& cout, Array<int> a) { 

    return cout; 
} 

それを実行すると、これは

ostream& operator<<(ostream& cout, Array<int>& a) { 

    return cout; 
} 
+1

どのように実行しますか?ちょっとした文脈を投稿できますか?アレイとは何ですか? –

+2

あなたは何を配列表示する必要があります!たぶんあなたはメモリを割り当てているでしょうし、コピーコンストラクタがなく、デストラクタがそのメモリを割り当て解除しています。 – AraK

答えて

1

ないプログラムのですか? What is The Rule of Three?の最初の答えが問題を解決するかどうかを確認してください(つまり、クラスが内部的にリソースへのポインタを処理しますが、コピーコンストラクタでディープコピーを実行しないため、同じリソースが2つ削除されます)。

1

あなたのArray<int>のコピーコンストラクタまたはデストラクタが壊れている可能性が圧倒されます。それに加えて、あなたはいくつかの重大な名前空間問題を持っています - あなたはostreamに名前空間stdを使っていますが、次に引数coutを呼び出します。これはstd :: coutとの衝突です。私はこのコードをコンパイルすると驚いています。そうでなければあいまいなので、標準の名前には常にstd ::を使うべきです。

+1

競合はありません。引数は、同じ名前のグローバル変数とメンバ変数を暗黙にシャドウします。 –

関連する問題