【发布时间】:2014-02-10 01:20:21
【问题描述】:
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。也许带有智能指针的普通容器是更好的选择,但我需要解决方案。
【问题讨论】:
-
我觉得不错? (到目前为止)从
**iter你的Container类型似乎是一个指针类型,所以push_back也是正确的。一个使用示例将有助于澄清事情 (sscce.org) -
@LightnessRacesinOrbit
Container::value_type是T*,然后new Container::value_type将创建一个T**。 -
@dyp:哦,对了 :) 两个都加 1
标签: c++ pointers copy-constructor smart-pointers