次のクラスを検討してください。
class Stats
{
private:
int arraySize; // size of array
int * data; // pointer to data, an array of integers
// default size of array in default constructor
static const int DEFAULT_SIZE = 10;
public:
Stats() // default constructor
{
arraySize = DEFAULT_SIZE; // element count set to 10
data = new int[DEFAULT_SIZE]; // array of integers
srand((unsigned int) time(NULL)); // seeds rand() function
// initializes integer array data with random values
for (int i = 0; i < DEFAULT_SIZE; i++)
{
// data filled with value between 0 and 10
data[i] = rand() % (DEFAULT_SIZE + 1);
}
}
~Stats() // destructor that deletes data memory allocation
{
delete [] data;
}
void displaySampleSet(int numbersPerLine)
{
cout << "Array contents:" << endl; // user legibility
// iterates through array and prints values in array data
for (int i = 0; i < arraySize; i++)
{
cout << data[i];
/* nested if statements that either prints a comma between
values or skips to next line depending on value of numbersPerLine */
if (i + 1 < arraySize)
{
if ((i + 1) % numbersPerLine != 0)
cout << ", ";
else
cout << endl;
}
}
}
}
何らかの理由で、次の方法で Stats オブジェクトを作成すると:
Stats statObject = Stats();
それから displaySampleSet() を呼び出すと、数値が正常に表示されます。ただし、Stats オブジェクトが次の方法で作成されると、関数はガベージを出力します。
Stats statObject;
statObject = Stats();
なぜこれを行うのかわかりませんし、整数ポインター「データ」および/またはオブジェクトの作成方法に関係していると感じていますが、何がわかりません...すべてのヘルプが完全です感謝!よろしくお願いします。
更新: デストラクタが追加されました