适用于原始数据类型和复杂数据类型的 C++ 模板析构函数

Vol*_*ire 2 c++ templates

在一个相关问题中,我询问了有关创建通用容器的问题。使用多态模板似乎是正确的方法。

然而,我一生都无法弄清楚应该如何编写析构函数。我希望分配的内存的所有者是容器,即使示例构造函数接受在T其他点分配的数组(及其维度)。

我希望能够做类似的事情

MyContainer<float> blah();
...
delete blah;
Run Code Online (Sandbox Code Playgroud)

MyContainer<ComplexObjectType*> complexBlah();
...
delete complexBlah;`
Run Code Online (Sandbox Code Playgroud)

我可以做这样的事情吗?我可以在没有智能指针的情况下做到这一点吗?

再次感谢您的投入。

Sco*_*ham 5

如果您想存储指向复杂类型的指针,我建议您将容器用作:MyContainer<shared_ptr<SomeComplexType> >,而对于原始类型,只需使用MyContainer<float>

shared_ptr当复杂类型被破坏时,应该注意适当地删除它。当原始类型被破坏时,不会发生任何奇妙的事情。


如果您以这种方式使用容器,则不需要太多的析构函数。您如何将物品存放在容器中?你使用STL容器,还是堆上的数组?STL 容器会自行删除。如果删除数组,这将导致执行每个元素的析构函数,如果每个元素是 a shared_ptrshared_ptr则析构函数将删除它本身持有的指针。