这种情况下不要使用任何释放的方法,除非函数明确要求你释放。
在C++中的约定是谁分配谁释放,如果函数需要分配空间,需要由函数调用者分配,并且把分配的空间通过参数传给函数,然后函数写入内容之后返回。分配方与释放方都是同一方,所以不存在不知道该怎么释放的问题。
C++里面你可以设计出几十种不同的内存分配方法,如果不是你自己分配的,是根本不可能正确释放的。
如果一定要调用方释放,那么函数需要在接口中明确告知如何释放,怎样释放,如果函数没有写,那么就不要释放,因为用错误的方法释放可能会直接造成程序崩溃,而不释放仅仅只是多占用了一点点内存而已。
所以重复一遍:如果你不知道应该怎么释放,那么就不要释放。
没有任何判断的可能——人家甚至可能就传进来了个静态变量,或者静态数组。
要解决这类问题,有几个思路:
根本不能随便释放,因为不知道这个指针来自哪个堆哪种分配方式,甚至不知道这是不是一个堆指针。释放错误程序直接崩溃。
这种情况不得不提一嘴COM,它的指针是自带释放函数的,就是Release,虽然这玩意已经是明日黄花,但理念就很好。