场景:
1. C++类有构造和析构函数,析构函数是在类对象被delete时(或局部变量自动销毁时)调用来释放资源。
2. C++类对象指针很多情况下需要赋值给void*通用指针来达到传输对象的目的,但是往往这种void*指针就是造成内存泄漏或程序错误的根源,
这就是为什么C++存在泛型的目的,它也是为了在编译时刻消除这种对象不确定性,避免delete或使用时的错误.
好了,看代码,以下代码有什么问题?
// 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; }
时间: 2024-10-06 02:16:19