定位new与对象
当使用定位new运算符为对象分配内存时,注意调用对象的析构函数。因为delete运算符必须跟new配套使用,而不是跟定位new配套使用。所以使用定位new为对象分配空间并初始化对象之后,不能用delete清除对象。这时如果对象的构造函数中使用new申请了内存,就会导致内存泄漏,因为不能使用delete清除对象。例如:
class BadString{private:int len;char * str;public:BadString();BadString(const char *);~BadString();void show();
};BadString::BadString(){str = new char[4];len = 3;strcpy(str, "C++");cout << "Using default constructor for: " << str << endl;
}BadString::BadString(const char * s){len = strlen(s);str = new char[len + 1];strcpy(str, s);cout << "Using self-defined constructor for: " << str << endl;
}BadString::~BadString(){cout << "Using destroyer for: " &l