История изменений
Исправление Siborgium, (текущая версия) :
У вас здесь
Instance instance; // <---------- копируется сюда
PhysicalDevices physDevices;
public:
Devices( Instance instance ) :
instance { instance }, physDevices( instance ) {} // <--------- копирование происходит здесь
структура Instance
копируется в Devices
, вне зависимости от того, по значению вы ее передаете, или по константной ссылке.
Здесь же
PhysicalDevices( Instance instance ) :
count { [ instance ]() -> std::uint32_t {
std::uint32_t count { 0 };
vkEnumeratePhysicalDevices(
instance.get(), &count, nullptr );
return count;
}() },
если бы вы передавали по (константной) ссылке, все должно было бы быть в порядке, но в данный момент здесь происходит второе копирование Instance
. Итого, у вас 3 экземпляра Instance
«владеют» одним и тем же ресурсом.
edit: вру, еще одно (третье) копирование происходит при захвате instance
в лямбду.
Исправление Siborgium, :
У вас здесь
Instance instance; // <---------- копируется сюда
PhysicalDevices physDevices;
public:
Devices( Instance instance ) :
instance { instance }, physDevices( instance ) {} // <--------- копирование происходит здесь
структура Instance
копируется в Devices
, вне зависимости от того, по значению вы ее передаете, или по константной ссылке.
Здесь же
PhysicalDevices( Instance instance ) :
count { [ instance ]() -> std::uint32_t {
std::uint32_t count { 0 };
vkEnumeratePhysicalDevices(
instance.get(), &count, nullptr );
return count;
}() },
если бы вы передавали по (константной) ссылке, все должно было бы быть в порядке, но в данный момент здесь происходит второе копирование Instance
. Итого, у вас 3 экземпляра Instance
«владеют» одним и тем же ресурсом.
edit: вру, еще одно копирование происходит при захвате instance
в лямбду.
Исходная версия Siborgium, :
У вас здесь
Instance instance; // <---------- копируется сюда
PhysicalDevices physDevices;
public:
Devices( Instance instance ) :
instance { instance }, physDevices( instance ) {} // <--------- копирование происходит здесь
структура Instance
копируется в Devices
, вне зависимости от того, по значению вы ее передаете, или по константной ссылке.
Здесь же
PhysicalDevices( Instance instance ) :
count { [ instance ]() -> std::uint32_t {
std::uint32_t count { 0 };
vkEnumeratePhysicalDevices(
instance.get(), &count, nullptr );
return count;
}() },
если бы вы передавали по (константной) ссылке, все должно было бы быть в порядке, но в данный момент здесь происходит второе копирование Instance
. Итого, у вас 3 экземпляра Instance
«владеют» одним и тем же ресурсом.