从编程纪律、规则上说,是不可以。
因为 new 和delete 操作时, 是把对象当成一个复杂类,而执行对应的构造/析构函数。 而 malloc 和 free 则不执行它们。
题目中所说的两种错配情况, 会导致不可预测的错误发生。而这种错误,在项目很大时是比较难发现的。相当于项目中埋藏的炸弹。
但是当对象是简单类型时,确实是不会出错。比如
int *i=new int[100];原因是 int,float 这种数字类型过于简单,没有复杂的构造/析构函数,因此此时 new 和 malloc是等价的。
但是比如在复杂类型A中:
class A错配会导致严重的问题,比如内存泄漏等。
因此工作中不提倡这种错配写法,尽管有时可能不会导致程序出错,但是这是一种很坏的习惯。