我有一个原始指针,并希望回调拥有它。我想出了这段代码:
A* a = new A();
dosomething(callback(unique_ptr<A>(a).get()))
// The callback always takes a raw pointer.
void callback(A* a) {
}
这是正确的方法吗?
答案 0 :(得分:1)
不,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>());
}
答案 1 :(得分:0)
我会简化整个事情并使用std::shared_ptr
:
auto a = std::make_shared<A>();
callback(a);
这需要您将callback
声明为首先获得std::shared_ptr
的人。
当然,callback
没有返回任何内容有点奇怪..