cuda и конструкторы/деструкторы
Есть некоторые классы, содержащие внутри указатели на память хоста или девайса. Сейчас эта память выделяется вручную с помощью методов .init(...) и освобождается через .release(), что не очень удобно. Хочется убрать всю работу с памятью в соответствующие конструкторы/деструкторы. Конструктор копирования, соответственно тривиален, не объявлен и создаётся компилятором автоматически. Теперь, если всё таки добавить явные конструкторы/деструкторы, то всё будет нормально при передаче параметра по ссылке, однако если передать параметр по значению, то по выходу из функции будет вызван деструктор, который в данном случае совершенно не нужен. Притом, деструктор, похоже, вызывается даже несмотря на то что у него не указан __device__ атрибут. Т.к. в __global__ функцию можно передавать параметры только по значению, то возникает проблема. Как всё это правильно сделать?
Первое что приходит на ум, это запихнуть всё тело деструктора в #ifdef __CUDACC__, но это выглядит грязным хаком.