也许我试图过于笼统了。(下面是原始问题) 具体来说,我有一个类Foo
的某些依赖Dep
。我还有一个类MockDep
并定义了一个类TestFoo
。这是我尝试编写的构造函数:
TestFoo(unique_ptr<MockDep> dep) : Foo(std::move(dep)), mock_dep_(dep.get()) {}
而Foo的构造函数如下所示:
Foo(unique_ptr<Dep> dep) : dep_(dep) {}
mock_dep_
在TestFoo
中声明为MockDep * mock_dep_
,而dep_
在Foo
中声明为unique_ptr<Dep> dep_
。我该如何让mock_dep_
包含dep_
的地址呢?(由于std::move(dep)
将其置空,因此上述方法不起作用。)
原始内容:
我有一个类型为Foo
的对象,我要将其传递给另一个类型为OtherObject
的对象,后者声称拥有它,但是以指向其基类的指针形式。然而,我想获取指向子对象的指针,以便引用它。我写了类似以下的代码:
Foo(std::unique_ptr<Child> thing) :
OtherObject(std::move(thing)), child_(thing.get()) {}
OtherObject(std::unique_ptr<Base> thing, ...) { ... }
然而,这似乎行不通,因为
std::move(thing)
似乎会使从 thing.get()
返回的指针变为空指针。
我可以将 Foo
的参数更改为 Child*
类型而不是 unique_ptr<Child>
,但我更喜欢能够使用后者,因为它明确记录了所有权语义。最适合(或者说不显眼)解决此问题的方式是什么? 编辑:
Foo
和 OtherObject
都是我正在定义构造函数的类。
OtherObject
是什么?据我所知,在那个上下文中它不能是一个函数。 - Shoe