只是一个关于shared_ptr的小查询.使用shared_ptr指向数组是一种好习惯吗?例如,shared_ptrsp(newint[10]);如果不是,那为什么不呢?我已经知道的一个原因是不能增加/减少shared_ptr。因此它不能像普通的指向数组的指针一样使用。 最佳答案 使用C++17,shared_ptr可用于管理动态分配的数组。shared_ptr在这种情况下,模板参数必须是T[N]或T[].所以你可以写shared_ptrsp(newint[10]);来自n4659,[util.smartptr.shared.con
为什么用std::auto_ptr会出错用标准容器? 最佳答案 C++标准规定STL元素必须是“可复制构造的”和“可赋值的”。换句话说,一个元素必须能够被分配或复制,并且这两个元素在逻辑上是独立的。std::auto_ptr不满足这个要求。以这段代码为例:classX{};std::vector>vecX;vecX.push_back(newX);std::auto_ptrpX=vecX[0];//vecX[0]isassignedNULL.要克服这个限制,您应该使用std::unique_ptr,std::shared_ptr或s
为什么用std::auto_ptr会出错用标准容器? 最佳答案 C++标准规定STL元素必须是“可复制构造的”和“可赋值的”。换句话说,一个元素必须能够被分配或复制,并且这两个元素在逻辑上是独立的。std::auto_ptr不满足这个要求。以这段代码为例:classX{};std::vector>vecX;vecX.push_back(newX);std::auto_ptrpX=vecX[0];//vecX[0]isassignedNULL.要克服这个限制,您应该使用std::unique_ptr,std::shared_ptr或s
std::unique_ptr支持数组,例如:std::unique_ptrp(newint[10]);但是需要吗?可能使用std::vector或std::array更方便。你觉得这个结构有什么用处吗? 最佳答案 有些人没有使用std::vector的奢侈,即使有分配器。有些人需要一个动态大小的数组,所以std::array出来了。有些人从已知返回数组的其他代码中获取数组;并且该代码不会被重写以返回vector什么的。通过允许unique_ptr,您就可以满足这些需求。简而言之,您使用unique_ptr当您需要时。当替代方案根本
std::unique_ptr支持数组,例如:std::unique_ptrp(newint[10]);但是需要吗?可能使用std::vector或std::array更方便。你觉得这个结构有什么用处吗? 最佳答案 有些人没有使用std::vector的奢侈,即使有分配器。有些人需要一个动态大小的数组,所以std::array出来了。有些人从已知返回数组的其他代码中获取数组;并且该代码不会被重写以返回vector什么的。通过允许unique_ptr,您就可以满足这些需求。简而言之,您使用unique_ptr当您需要时。当替代方案根本
这个问题在这里已经有了答案:关闭11年前.PossibleDuplicates:pimpl:shared_ptrorunique_ptrsmartpointers(boost)explained有人能解释一下shared_ptr和unique_ptr之间的区别吗? 最佳答案 这两个类都是智能指针,这意味着它们会自动(在大多数情况下)在无法再引用该对象时释放它们指向的对象。两者的区别在于每种类型有多少个不同的指针可以引用一个资源。当使用unique_ptr时,最多可以有一个unique_ptr指向任一资源。当unique_ptr被销毁
这个问题在这里已经有了答案:关闭11年前.PossibleDuplicates:pimpl:shared_ptrorunique_ptrsmartpointers(boost)explained有人能解释一下shared_ptr和unique_ptr之间的区别吗? 最佳答案 这两个类都是智能指针,这意味着它们会自动(在大多数情况下)在无法再引用该对象时释放它们指向的对象。两者的区别在于每种类型有多少个不同的指针可以引用一个资源。当使用unique_ptr时,最多可以有一个unique_ptr指向任一资源。当unique_ptr被销毁
我在标题中有一些代码,如下所示:#includeclassThing;classMyClass{std::unique_ptrmy_thing;};如果我在不包含Thing类型定义的cpp中包含此header,则在VS2010-SP1下无法编译:1>C:\ProgramFiles(x86)\MicrosoftVisualStudio10.0\VC\include\memory(2067):errorC2027:useofundefinedtype'Thing'将std::unique_ptr替换为std::shared_ptr即可编译。所以,我猜是当前VS2010std::unique
我在标题中有一些代码,如下所示:#includeclassThing;classMyClass{std::unique_ptrmy_thing;};如果我在不包含Thing类型定义的cpp中包含此header,则在VS2010-SP1下无法编译:1>C:\ProgramFiles(x86)\MicrosoftVisualStudio10.0\VC\include\memory(2067):errorC2027:useofundefinedtype'Thing'将std::unique_ptr替换为std::shared_ptr即可编译。所以,我猜是当前VS2010std::unique
我开始研究C++11的智能指针,但我看不到std::weak_ptr的任何有用用途。谁能告诉我std::weak_ptr什么时候有用/必要? 最佳答案 std::weak_ptr是解决danglingpointer的一个很好的方法。问题。通过仅使用原始指针,不可能知道引用的数据是否已被释放。相反,通过让std::shared_ptr管理数据,并将std::weak_ptr提供给数据的用户,用户可以通过调用expired()或lock().您不能单独使用std::shared_ptr来执行此操作,因为所有std::shared_ptr