我有一个类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?
但它不包括吸气剂部分。这(上面)是正确的方法吗?还有什么可以想到的?
答案 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();
}