#include <memory>
#include <iostream>

class DataProvider
{
public:
    int x;
};

class MyClass
{
public:
    const DataProvider &getDataProvider() const
    {
        return *data;
    }
    void setDataProvider(std::unique_ptr<DataProvider> newData)
    {
        data = std::move(newData);
    }

private:
    std::unique_ptr<DataProvider> data;
};

int main()
{
    MyClass a;
    std::unique_ptr<DataProvider> provider(new DataProvider{5});
    a.setDataProvider(std::move(provider));
    const DataProvider &otherProvider = a.getDataProvider();
    std::cout << otherProvider.x << std::endl;
}