почему возникает ошибка памяти, когда я нажимаю объект, который содержит критическое_сечение? - PullRequest
2 голосов
/ 04 августа 2011
class Wrap
{
  CRITICAL_SECTION cs_;
public:
  Wrap() { InitializeCriticalSection(&cs_); }
  ~Wrap() { DeteteCriticalSection(&cs_); }
  Wrap & operator=(const Wrap& rhs) { return *this; }
}

int main()
{
  std::vector<Wrap> v;
  v.push_back(Wrap());   //Memory error.
}

Скажите, пожалуйста, к чему приводит ошибка и как ее исправить.

1 Ответ

1 голос
/ 04 августа 2011

Джеймс был прав в своем комментарии. Попробуйте это:

class Wrap
{
    CRITICAL_SECTION cs_;
public:
    Wrap()
    {
        InitializeCriticalSection(&cs_);
    }

    Wrap(const Wrap&)
    {
        InitializeCriticalSection(&cs_);
    }

    ~Wrap()
    {
        DeleteCriticalSection(&cs_);
    }   
};

Такие вещи можно легко обнаружить с помощью AppVerifier из средства отладки для Windows.

Удачи!

...