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我更改了最后一句话,我的意思是指向已分配内存的指针,但这不会改变任何东西。在许多应用程序中动态分配的原因是,所讨论的对象的生存期由程序逻辑决定。这意味着智能指针不合适。不确定我是否理解-你说“智能指针不适合”用于“动态分配”?我应该将其命名为指针,指向分配的内存,如果丢失将导致泄漏,如果不安全管理,将导致失眠
。