C++ 为什么在推送包含关键\u部分的对象时出现内存错误? 类换行 { 临界截面cs; 公众: Wrap(){InitializeCriticalSection(&cs)} ~Wrap(){detteCriticalSection(&cs)} Wrap&operator=(const Wrap&rhs){return*this;} } int main() { std::向量v; v、 向后推(Wrap());//内存错误。 }

C++ 为什么在推送包含关键\u部分的对象时出现内存错误? 类换行 { 临界截面cs; 公众: Wrap(){InitializeCriticalSection(&cs)} ~Wrap(){detteCriticalSection(&cs)} Wrap&operator=(const Wrap&rhs){return*this;} } int main() { std::向量v; v、 向后推(Wrap());//内存错误。 },c++,stl,critical-section,C++,Stl,Critical Section,请告诉我是什么导致了错误,以及我如何修复它。詹姆斯的评论是正确的。试试这个: class Wrap { CRITICAL_SECTION cs_; public: Wrap() { InitializeCriticalSection(&cs_); } ~Wrap() { DeteteCriticalSection(&cs_); } Wrap & operator=(const Wrap& rhs) { return *this; } } int

请告诉我是什么导致了错误,以及我如何修复它。

詹姆斯的评论是正确的。试试这个:

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.
}
使用AppVerifier可以很容易地从windows调试工具中检测到这样的事情


祝你好运

请添加您收到的错误的完整详细信息。正常内存错误“此内存无法读取”。非常感谢!它起作用了。我忘了确保复制构造函数有正确的行为。实际上,您还应该注意
操作符=
(OP也有)。大多数STL集合中对元素的要求都是可复制构造和可分配的。赋值将不用于推回或重新分配,但对于
*iteraotr=value
集合[i]=value
和某些算法(例如排序)是必需的。
class Wrap
{
    CRITICAL_SECTION cs_;
public:
    Wrap()
    {
        InitializeCriticalSection(&cs_);
    }

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

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