【发布时间】:2013-04-15 08:49:16
【问题描述】:
我有一个 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;
};
我读过这个:How do I pass a unique_ptr argument to a constructor or a function?
但它不包括吸气剂部分。这是(以上)正确的方法吗?可以考虑哪些替代方案?
【问题讨论】:
-
完整的例子会比代码 sn-ps 更好
-
Works fine here。什么虚表?我们没有任何虚函数。
-
@sftrabbit 你说得对,我必须添加一些关于 DataProvider 的更多信息以及它最终被破坏的方式。
-
DataProvider的默认构造函数是否设置xyz? -
@user1916893 好的,提取您认为重要的行并使用它们制作一个新的小程序。当您遇到同样的问题时,请在此处发布。据我们所知,问题在于 1500 行遗留代码。
标签: c++ visual-studio-2012 dependency-injection getter-setter unique-ptr