我是 C++ 的新手,我有一个类保存了一些内存,这个类看起来像:
class MyClass
{
public:
MyClass (int s)
{
if (s <= 0) _size = 1;
else _size = s;
data = new int[_size]; // may throw exception
}
private:
int *data;
int _size;
};
Run Code Online (Sandbox Code Playgroud)
据我所知,在构造函数中抛出异常是不安全的,所以我把 malloc 放到了一个 init 函数中。
class MyClass
{
public:
MyClass (int s)
{
if (s <= 0) _size = 1;
else _size = s;
}
void init()
{
data = new int[_size];
}
private:
int *data;
int _size;
};
Run Code Online (Sandbox Code Playgroud)
我的问题:
我有以下结构:
template<typename T>
struct Foo
{
typename T::iterator iter;
};
Run Code Online (Sandbox Code Playgroud)
预期类型:
iter是 astd::map<K, V>::iterator时T推导为std::map<K, V>。
iter是一个std::map<K, V>::const_iterator何时T推导为const std::map<K, V>
但我的代码总是得到一个std::map<K, V>::iterator.
如何达到预期的实施效果?