【发布时间】:2021-04-22 21:55:05
【问题描述】:
我正在玩一些我仍然很陌生的概念。我想做的是使用唯一指针将“屏幕”对象依赖注入私有成员“TempCtrl::mScreen”。我相信我正确地实现了设计模式,但我从来没有用唯一的指针做到这一点,而且似乎指针在 TempCtrl 构造函数调用之前被删除了。为什么会这样?
主要功能摘录:
#include "tempctrl.hpp"
#include "screen.hpp"
#include <memory>
int main()
{
std::unique_ptr<Screen> _Screen(new Screen);
TempCtrl tc(_Screen);
/* ... */
}
TempCtrl 构造函数声明摘录:
class TempCtrl
{
public:
TempCtrl(std::unique_ptr<Screen> _Screen);
~TempCtrl();
private:
std::unique_ptr<Screen> mScreen;
};
TempCtrl 实现摘录:
TempCtrl::TempCtrl(std::unique_ptr<Screen> _Screen)
: mScreen(_Screen)
{
}
编译器输出:
/usr/bin/g++ -std=c++11 -g -c screen.cpp tempctrl.cpp main.cpp
tempctrl.cpp: In constructor 'TempCtrl::TempCtrl(std::unique_ptr<Screen>)':
tempctrl.cpp:6:18: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Screen; _Dp = std::default_delete<Screen>]'
: mScreen(_Screen)
^
In file included from /usr/include/c++/8/memory:80,
from tempctrl.hpp:14,
from tempctrl.cpp:1:
/usr/include/c++/8/bits/unique_ptr.h:394:7: note: declared here
unique_ptr(const unique_ptr&) = delete;
^~~~~~~~~~
main.cpp: In function 'int main()':
main.cpp:9:22: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Screen; _Dp = std::default_delete<Screen>]'
TempCtrl tc(_Screen);
^
In file included from /usr/include/c++/8/memory:80,
from tempctrl.hpp:14,
from main.cpp:1:
/usr/include/c++/8/bits/unique_ptr.h:394:7: note: declared here
unique_ptr(const unique_ptr&) = delete;
^~~~~~~~~~
In file included from main.cpp:1:
tempctrl.hpp:68:3: note: initializing argument 1 of 'TempCtrl::TempCtrl(std::unique_ptr<Screen>)'
TempCtrl(std::unique_ptr<Screen> _Screen);
^~~~~~~~
make: *** [Makefile:14: *.o] Error 1
【问题讨论】:
标签: c++ c++11 dependency-injection unique-ptr