好了,看代码,以下代码有什么问题?
// test_class.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
class A
{
public:
A()
{
i = new int;
}
~A()
{
delete i;
}
int* i;
};
class B
{
public:
B(void* data)
{
data_ = data;
}
~B()
{
delete data_;
}
void* data_;
};
template <class T>
class C
{
public:
C(T* data)
{
data_ = data;
}
~C()
{
delete data_;
}
T* data_;
};
void Wrong()
{
A *a = new A();
B b(a); //函数返回时A 的析构函数不会调用
}
void Right()
{
A *a = new A();
C<A> c(a); //函数返回时A 的析构函数会调用
}
int _tmain(int argc, _TCHAR* argv[])
{
Wrong();
Right();
return 0;
}
[C/C++]_[中级]_[delete 类对象指针的注意事项]
原文地址:http://blog.csdn.net/infoworld/article/details/45560219