我有以下内容:
enum Type
{ One = 0, Two};
class MySubClass
{
private:
MySubClass(); // prohibited
MySubClass(const MySubClass&); // prohibited
MySubClass & operator (const MySubClass&); // prohibited
public :
MySubClass(int x);
};
class MyClass
{
MyClass(int x) : m_x(new SubClass(x))
{}
~MyClass()
{ delete m_x; }
private :
MySubClass * m_x;
};
typedef multimap<Type, MyClass> my_multimap;
typedef pair<Type, MyClass> my_pair;
Run Code Online (Sandbox Code Playgroud)
我正在尝试执行以下操作:
my_multimap my_map;
my_map.insert(my_pair(One, MyClass(5)));
Run Code Online (Sandbox Code Playgroud)
我得到一个未处理的异常结果,该应用程序正在尝试读取0xfeeefeee等.
这是怎么回事?我怎样才能解决这个问题?请注意,这是我正在处理的简化案例;
有一个经验法则,称为" 三个规则 ":每当你有一个析构函数或赋值运算符或一个复制构造函数时,你很可能需要它们全部三个.您的代码也不例外.
想想复制类型对象时会发生什么.这个
MyClass obj1;
MyClass obj2(obj1);
Run Code Online (Sandbox Code Playgroud)
代码也会崩溃.
| 归档时间: |
|
| 查看次数: |
385 次 |
| 最近记录: |