unique_ptr对象的getter和setter(依赖注入)

时间:2013-04-15 08:49:16

标签: c++ visual-studio-2012 dependency-injection getter-setter unique-ptr

我有一个类MyClass,它拥有一些DataProvider类的实例,并且有一个getter for this。

为了依赖注入,我宁愿拥有一个getter和一个setter。此外,DataProvider应包含在std::unique_pointer

#include <memory>
#include <iostream>

class DataProvider
{
public:
    DataProvider() {}
    virtual ~DataProvider() {}
    /* stuff */

private:
    /* more stuff */

};

class MyClass
{
public:
MyClass() {}

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

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

我读过这个:How do I pass a unique_ptr argument to a constructor or a function?

但它不包括吸气剂部分。这(上面)是正确的方法吗?还有什么可以想到的?

2 个答案:

答案 0 :(得分:4)

正如你写的那样

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

完全没问题。在setter中,类获得了DataProvider实例的所有权,并且永远不会放弃(就此处所见)。

sftrabbit在这里给出了一个完整的例子:http://ideone.com/enarAS

答案 1 :(得分:0)

虽然我不确定这是否真的是你需要的,但这是一个起点:

const DataProvider &getDataProvider() const
{
    return *data.get();
}