在一个相关问题中,我询问了有关创建通用容器的问题。使用多态模板似乎是正确的方法。
然而,我一生都无法弄清楚应该如何编写析构函数。我希望分配的内存的所有者是容器,即使示例构造函数接受在T其他点分配的数组(及其维度)。
我希望能够做类似的事情
MyContainer<float> blah();
...
delete blah;
Run Code Online (Sandbox Code Playgroud)
和
MyContainer<ComplexObjectType*> complexBlah();
...
delete complexBlah;`
Run Code Online (Sandbox Code Playgroud)
我可以做这样的事情吗?我可以在没有智能指针的情况下做到这一点吗?
再次感谢您的投入。
如果您想存储指向复杂类型的指针,我建议您将容器用作:MyContainer<shared_ptr<SomeComplexType> >,而对于原始类型,只需使用MyContainer<float>。
shared_ptr当复杂类型被破坏时,应该注意适当地删除它。当原始类型被破坏时,不会发生任何奇妙的事情。
如果您以这种方式使用容器,则不需要太多的析构函数。您如何将物品存放在容器中?你使用STL容器,还是堆上的数组?STL 容器会自行删除。如果删除数组,这将导致执行每个元素的析构函数,如果每个元素是 a shared_ptr,shared_ptr则析构函数将删除它本身持有的指针。