小编dan*_*ipi的帖子

在构造函数或 init 函数中分配内存?

我是 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)

我的问题:

  1. 构造函数或init函数中的内存分配,哪个更好
  2. 如果我选择了 init …

c++ oop constructor initialization raii

4
推荐指数
1
解决办法
94
查看次数

当 T 为 'const std::map' 时,如何获取 const_iterator?

我有以下结构:

template<typename T>
struct Foo 
{
  typename T::iterator iter;
};
Run Code Online (Sandbox Code Playgroud)

预期类型:

  • iter是 astd::map<K, V>::iteratorT推导为std::map<K, V>

  • iter是一个std::map<K, V>::const_iterator何时T推导为const std::map<K, V>

但我的代码总是得到一个std::map<K, V>::iterator.

如何达到预期的实施效果?

c++ templates type-alias

2
推荐指数
1
解决办法
171
查看次数

标签 统计

c++ ×2

constructor ×1

initialization ×1

oop ×1

raii ×1

templates ×1

type-alias ×1