我有一个原始指针,并希望回调拥有它。我拿出这个代码:这是使用unique_ptr的正确方法吗?
A* a = new A();
dosomething(callback(unique_ptr<A>(a).get()))
// The callback always takes a raw pointer.
void callback(A* a) {
}
这是正确的方法吗?
我有一个原始指针,并希望回调拥有它。我拿出这个代码:这是使用unique_ptr的正确方法吗?
A* a = new A();
dosomething(callback(unique_ptr<A>(a).get()))
// The callback always takes a raw pointer.
void callback(A* a) {
}
这是正确的方法吗?
不,callback
不拥有它。但是,在dosomething
完成后,它将被销毁。
如果您构建dosomething
采取的回调和A *
,然后有dosomething
呼叫callback
给定A *
作为参数,它可以工作,只要创建它的执行过程中只使用了unique_ptr
。
例子:
void callback(A *a)
{
if (!a) return;
std::cout << "Got A " << a->name() << std::endl;
}
void dosomething(const std::function<void(A *)> &func, std::unique_ptr<A> obj)
{
std::cout << "Doing some operation..." << std::endl;
func(obj.get());
}
int main()
{
dosomething(callback, std::make_unique<A>());
}
@ Jarod42我不知道该功能,添加它。 – Kupiakos
我将简化整个事情并使用std::shared_ptr
:
auto a = std::make_shared<A>();
callback(a);
这将要求你申报callback
是一种能够在首位获得std::shared_ptr
。
,这是一个有点奇怪的是callback
不返回任何东西..
你到底想干什么?你在期待你的智能指针在这种情况下做什么? – Galik
由于'callback'不能返回任何东西,所以不能调用'dosomething(callback(...))'。由于'callback'应该是一个回调函数,所以你可能需要这样做:'sosomething([a](){/ * callback * /});'?也许我可以帮助,如果我知道'dosomething'预期的类型。 – JojOatXGME
@ Kupiakos:你写了我正要写的答案,作为评论。我建议你让它成为答案。 ;-)或许就如何以一种好的方式来做事情也许增加一些建议。 –