Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-共享\u ptr<;向量<;T>&燃气轮机;vs.vector<;共享\u ptr<;T>&燃气轮机;_C++_Stl_Shared Ptr_Stdvector - Fatal编程技术网

C++ C++;-共享\u ptr<;向量<;T>&燃气轮机;vs.vector<;共享\u ptr<;T>&燃气轮机;

C++ C++;-共享\u ptr<;向量<;T>&燃气轮机;vs.vector<;共享\u ptr<;T>&燃气轮机;,c++,stl,shared-ptr,stdvector,C++,Stl,Shared Ptr,Stdvector,我看到很多情况下人们使用vector。您何时以及为什么要使用共享\u ptr?对我来说,后者在性能和内存使用方面似乎更有效。在整个应用程序中共享单个对象向量是否错误 感谢使用:vector将允许您将T类型的实例从该向量传递到代码的其他部分,而不用担心它们不会被释放。即使你的向量不再存在 shared_ptr另一方面,仅保护vector,其类型为T的元素不受内存泄漏的保护。这里我假设T是指针类型的,如果T是非指针类型的,那么在这里进行内存泄漏当然没有问题。事实上,有人可以做T=shared\u p

我看到很多情况下人们使用
vector
。您何时以及为什么要使用
共享\u ptr
?对我来说,后者在性能和内存使用方面似乎更有效。在整个应用程序中共享单个对象向量是否错误

感谢使用:
vector
将允许您将
T
类型的实例从该向量传递到代码的其他部分,而不用担心它们不会被释放。即使你的向量不再存在

shared_ptr
另一方面,仅保护vector,其类型为
T
的元素不受内存泄漏的保护。这里我假设
T
是指针类型的,如果
T
是非指针类型的,那么在这里进行内存泄漏当然没有问题。事实上,有人可以做
T=shared\u ptr

实际上使用
向量
更为常见,我真的不记得使用
共享\u ptr


关键是不要在代码中保留指向已分配内存的裸指针,始终将它们保存在某种智能指针中。如果您实现自己的分配/解除分配机制,也就是说,使用RAII,就完全可以了。

std::vector
是共享指针的向量,
std::shared\u ptr
是指向向量的共享指针。完全不同。另外,不要将新的智能指针视为指针,而应该从所有权的角度来看待它。指针一次只能由一个“用户”拥有,还是同时由多个“用户”拥有?是否有使用
std::shared\u ptr
的情况?(这种类型以动态分配的
std::vector
为前提,而动态分配
std::vector
的情况极为罕见。)@JamesKanze:当您试图在内存中表示树时?虽然我个人会继续使用
类节点:public std::vector
,但标准中的UB是该死的。@JamesKanze:ahhh哦,这本书有一个构造函数
QueryResult(字符串s,shared_ptr最后一句话完全是胡说八道。这在很大程度上取决于应用程序,但在大多数使用动态内存的应用程序中,我希望大多数指针都是用于导航的,应该是原始指针。@JamesKanze我更改了最后一句话,我的意思是指向已分配内存的指针,但这不会改变任何东西。在许多应用程序中动态分配的原因是,所讨论的对象的生存期由程序逻辑决定。这意味着智能指针不合适。不确定我是否理解-你说“智能指针不适合”用于“动态分配”?我应该将其命名为
指针,指向分配的内存,如果丢失将导致泄漏,如果不安全管理,将导致失眠