LINUX.ORG.RU

История изменений

Исправление 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 «владеют» одним и тем же ресурсом.