Вы храните адрес временного, который выходит за рамки. Использование *kernel
после того, что указывает на то, что выходит из области видимости, является неопределенным поведением.
kernel
должен иметь тип std::unique_ptr<X>
вместо типа X*
.
Заменить назначение на:
kernel = std::make_unique<Kernel_Matern>(param, param.size());
или
kernel = std::make_unique<Kernel_SE>(param, param.size());
в двух рассматриваемых строках.
Если у вас есть код, в котором вы передаете kernel
функции, вместо этого передайте kernel.get()
.
Обратите внимание, что блоки копируют экземпляры GP
, но не перемещают их, поскольку уникальный ptr предназначен только для перемещения. Если у вас есть тип, который хранит значения и указатели в своих собственных значениях, его копирование, вероятно, в любом случае будет ошибкой.