可以混合使用C风格与C++风格的内存分派与重新分配吗
在这种意义上是可以的:你可以在同一个程序中使用malloc()和new。
在这种意义上是不行的:你不能使用malloc()来建立一个对象,又通过delete 来释放它。你也不能用new 建立一个新的对象,然后通过free()来释放它,或者通过realloc()在数组中再建立一个新的。
C++中的new 和delete 操作可以保证正确的构造和析构:构造函数和析构函数在需要它们的时候被调用。C 风格的函数alloc(), calloc(), free(), 和realloc()却不能保证这一点。此外,用new 和delete 来获得和释放的原始内存,并不一定能保证与malloc()和free()兼容。如果这种混合的风格在你的系统中能够运用,只能说是你走运——暂时的。
如果你觉得需要使用realloc()——或者要做更多——考虑使用标准库中的vector。例如:
// 从输入中将词读取到一个字符串vector 中
vector<string> words;
string s;
while (cin>>s && s!=".") words.push_back(s);
vector 会视需要自动增长。
在这种意义上是不行的:你不能使用malloc()来建立一个对象,又通过delete 来释放它。你也不能用new 建立一个新的对象,然后通过free()来释放它,或者通过realloc()在数组中再建立一个新的。
C++中的new 和delete 操作可以保证正确的构造和析构:构造函数和析构函数在需要它们的时候被调用。C 风格的函数alloc(), calloc(), free(), 和realloc()却不能保证这一点。此外,用new 和delete 来获得和释放的原始内存,并不一定能保证与malloc()和free()兼容。如果这种混合的风格在你的系统中能够运用,只能说是你走运——暂时的。
如果你觉得需要使用realloc()——或者要做更多——考虑使用标准库中的vector。例如:
// 从输入中将词读取到一个字符串vector 中
vector<string> words;
string s;
while (cin>>s && s!=".") words.push_back(s);
vector 会视需要自动增长。