gpt4 book ai didi

c++ - unique_ptr 创建说明

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:55 25 4
gpt4 key购买 nike

这是 XCode C++ 语言方言 c++1y。帮助我理解 unique_ptr:

//1

auto ouput2 = make_unique<standard::Algorithm>(AlgorithmFactory::create("YamlOutput",
"filename", outputFilename));

//2

unique_ptr<standard::Algorithm> output(standard::AlgorithmFactory::create("YamlOutput",
"filename", outputFilename));

1 次构建失败,出现“语义问题:分配抽象类类型‘essentia::standard::Algorithm’的对象”,但 2 次成功。

read这两个是等价的,那么为什么一个成功而另一个不成功呢?

我查看了 AlgorithmFactory::create() 的源代码,它根据字符串输入返回一个 BaseAlgorithm*。没有真正理解对象层次结构,因为 standard::Algorithm 似乎与 BaseAlgorithm 没有任何关系(它没有扩展它)。

这就是我使用的 Essentia 库的文档是如何做到的,除了他们使用的是裸指针。

最佳答案

它们不等价。 make_unique创建对象,而 unique_ptr简单地包装一个现有的指针。

您的第一行相当于 unique_ptr<standard::Algorithm>(new standard::Algorithm(AlgorithmFactory::create(...))) .注意 new 的用法在这里。

关于c++ - unique_ptr 创建说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23447522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com