也许我试图过于笼统。(下面的原始问题)具体来说,我对Dep
class有一些依赖Foo
。我也有一个类MockDep
,并且正在定义一个类TestFoo
。这是我尝试编写的构造函数:
TestFoo(unique_ptr<MockDep> dep) : Foo(std::move(dep)), mock_dep_(dep.get()) {}
AndFoo
的构造函数看起来像:
Foo(unique_ptr<Dep> dep) : dep_(dep) {}
mock_dep_
在TestFoo
as中声明MockDep* mock_dep_
,并在as中声明。我怎样才能得到包含的地址?(因为上面的内容无效,因为nulls out 。)dep_
Foo
unique_ptr<Dep> dep_
mock_dep_
dep_
std::move(dep)
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
' 参数更改为 typeChild*
而不是unique_ptr<Child>
,但我更希望能够执行后者,因为它明确记录了所有权语义。
解决这个问题的最合适(或失败,不引人注目)的方法是什么?
编辑:Foo
并且OtherObject
都意味着我正在定义其构造函数的类。