я пока примитивный тест сделал (мой класс - простенький буфер):
1) проверяем правильность копирования (идентичность копии)
2) модифицируем исходный буфер, новый не должен поменяться
3) модифицируем новый буфер, исходный не должен поменяться
Если я закоментирую оператор присваивания и конструктор копирования, два последних теста не проходят (как и ожидалось).
Код весь находится в функции main и выглядит примерно так:
// тестируем конструктор копирования
{
// инициализируем буфер масивом
YBuffer1 buffer(rowBuffer, SIZE);
YBuffer1 bufferCopy(buffer);
// проверяем правильность копирования
ok = true;
for (i = 0; i < SIZE; i++){
if (bufferCopy[i] != buffer.at(i)){
ok = false;
}
}
if (ok){
qDebug() << "test COPY CONSTRUCTOR, coping - passed";
}else{
qDebug() << "test COPY CONSTRUCTOR, coping - ERROR";
}
const unsigned int index1 = SIZE/2;
// модифицируем исходный, новый не должен поменяться
char originalFirst = buffer.at(index1);
buffer[index1] = ~buffer.at(index1);
if (bufferCopy.at(index1) == originalFirst){
qDebug() << "test COPY CONSTRUCTOR, modifying original - passed";
}else{
qDebug() << "test COPY CONSTRUCTOR, modifying original - ERROR";
}
// модифицируем новый, исходный не должен поменяться
const unsigned int index2 = index1/2;
char originalSecond = buffer.at(index2);
bufferCopy[index2] = ~bufferCopy.at(index2);
if (buffer.at(index2) == originalSecond){
qDebug() << "test COPY CONSTRUCTOR, modifying new - passed";
}else{
qDebug() << "test COPY CONSTRUCTOR, modifying new - ERROR";
}
}// конец теста
...
//ещё несколько тестов
Т.е. я ограничил область видимости каждого теста фигурными скобками, и полагал, что по выходу за эти скобки, программа должна аварийно завершатся при отсутствии собственных конструктора копирования и оператора присваивания. Но программа падает почему-то после всех тестов, а не когда произойдёт выход за фигурные скобки.