11

我有一个类MyClass,它拥有某个类的实例,DataProvider并为此有一个 getter。

为了依赖注入,我更喜欢有一个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;
};

我读过这个:如何将 unique_ptr 参数传递给构造函数或函数?

但它不包括吸气剂部分。这是(以上)正确的方法吗?可以考虑哪些替代方案?

4

2 回答 2

10

正如你所写

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

于 2013-07-05T06:41:48.160 回答
0

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

const DataProvider &getDataProvider() const
{
    return *data.get();
}
于 2013-04-15T10:59:28.787 回答