成员函数中能free(this);这样用吗
在类的成员函数中能这样用吗,free(this),delete this?这样能把动态分配的空间释放掉吗,下面这个程序用free(this),也没报错,不过总觉得怪怪的,大家给说说
//: C13:MallocClass.cpp
// Malloc with class objects
// What you 'd have to do if not for "new "
#include "Include\require.h "
#include <cstdlib> // malloc() & free()
#include <cstring> // memset()
#include <iostream>
using namespace std;
class Obj
{
int i, j, k;
enum { sz = 100 };
char buf[sz];
public:
void initialize() { // Can 't use constructor
cout < < "initializing Obj " < < endl;
i = j = k = 0;
memset(buf, 0, sz);
}
void destroy() { // Can 't use destructor
cout < < "destroying Obj " < < endl;
free(this);
}
};
int main()
{
Obj* obj = (Obj*)malloc(sizeof(Obj));
require(obj != 0);
obj-> initialize();
// ... sometime later:
obj-> destroy();
// free(obj);
return 0;
} ///:~
[解决办法]
this就是对象的指针,在你这里free(this)就和free(obj)一样,不过这样的编程风格很不好
[解决办法]
会释放掉,程序没什么错误。
只是逻辑。。
要申请,释放空间,需要这么绕来绕去么
[解决办法]
这样用是可以的
不过一般不习惯这种用法
不是很规范的程序书写方式
[解决办法]
这样构造函数和析构函数都不会得到调用, 对象的初始化和收尾工作将必须自己完成.
在这里, 你的initialize和destroy就代替了构造函数和析构函数.
你实际上做了本来编译器应该做的工作.
[解决办法]
malloc
free
不会调用构造和析构
所以最好还是用
new
delete
[解决办法]
delete this这是一种技术,在more effective c++里有介绍,一般是用来 "只让对象产生于堆中 "而设计的.详细可以去查看该书