如何实现智能容器的复制构造函数


struct Delete
{
     template <typename T>
     void operator() (T* t)
     {
         delete t;
     }
};
template <typename Container>
class SmartContainer
     : public Container
{
public:
     ~SmartContainer()
     {
         std::for_each(Container::begin(), Container::end(), Delete());
     }
     SmartContainer(const SmartContainer& other)
     {
         for (typename Container::const_iterator iter = other.begin(); iter != other.end(); ++iter) {
             push_back(new typename Container::value_type(**iter));
         }
     }
   SmartContainer() {}
};

在此代码中,我尝试实现一个智能容器。容器包含指针。当被销毁时,它会删除指针。问题在于编写复制构造函数。它应该复制对象并将副本指针放入容器中。我在此push_back行中遇到错误,因为Container::value_type是指针类型,但是它需要创建一个反射类型的对象。std::remove_pointer在这里可能很有用,但是我的编译器不支持C 11。也许带有智能指针的普通容器是一个更好的选择,但我需要解决方案。

您可以实现自己的remove_pointer(来自cppreference.com):

template< class T > struct remove_pointer                    {typedef T type;};
template< class T > struct remove_pointer<T*>                {typedef T type;};
template< class T > struct remove_pointer<T* const>          {typedef T type;};
template< class T > struct remove_pointer<T* volatile>       {typedef T type;};
template< class T > struct remove_pointer<T* const volatile> {typedef T type;};

然后做typename remove_pointer<Container::value_type>::type

更改模板参数。而不是Container使其Container<T*>,然后您将拥有可用的基本对象类型。

template <typename Container, typename T>
class SmartContainer
     : public Container<T*>

相关内容

  • 没有找到相关文章

最新更新