我尝试在复制构造之后(在def export():
with open("listtxt.txt", 'w') as export_file:
json.dump(mainlist, export_file)
附近)测试“ 双重免费 ”,但是 ./ a.out 不要提示。
AutoPtr<A> p_b = p_a
终端输出:
#include <iostream>
using namespace std;
class A {
public:
A(int i = 0) { cout << "A construct:" << this << endl; }
~A() { cout << "A destruct:" << this << endl; }
void print() { cout << n << endl; }
int n;
};
template<typename T>
class AutoPtr {
public:
AutoPtr(T *p= NULL): ptr(p) {}
~AutoPtr() {
cout << "AutoPtr destruct: " << ptr << endl;
delete ptr;
}
T &operator*(void) const {
return *ptr;
}
T *operator->(void) const {
return &**this;
}
private:
T *ptr;
};
int main(void)
{
AutoPtr<A> p_a(new A(0));
++p_a->n;
p_a->print();
AutoPtr<A> p_b = p_a;
++p_b->n;
p_b->print();
return 0;
}
我的gcc版本8.2.1
答案 0 :(得分:1)
使用new
分配的通过不指向有效对象的指针进行删除的行为(例如,当指针被另一个删除使之无效时)是不确定的。
不能保证行为未定义的程序会“提示”任何事情。