Я не могу ответить, поэтому просто будьте осторожны, если в столбце поддерживаются значения NULL, OLD.x & lt;> NEW.x не достаточно, потому что
SELECT IF(1<>NULL,1,0)
возвращает 0 как и
NULL<>NULL 1<>NULL 0<>NULL 'AAA'<>NULL
Таким образом, он не будет отслеживать изменения FROM и TO NULL
Правильный способ в этом сценарии -
((OLD.x IS NULL AND NEW.x IS NOT NULL) OR (OLD.x IS NOT NULL AND NEW.x IS NULL) OR (OLD.x<>NEW.x))
delete []
- что-то, что не new []
, ни ваше, строго противопоказано.
Посмотрите на эти строки:
uint8_t testBytes[] = {1, 2, 3, 4};
std::unique_ptr<uint8_t[]> testBytesPtr = std::make_unique<uint8_t[]>(4);
testBytesPtr.reset(testBytes);
Удаление нерелевантного эфемерного динамического распределения оставляет:
uint8_t testBytes[] = {1, 2, 3, 4};
std::unique_ptr<uint8_t[]> testBytesPtr(testBytes);
Что вызывает неопределенное поведение при включении dtor.
По общему признанию, вы перемещаете std::unique_ptr
один раз, но это просто сдвигает точную точку, где происходит взрыв.