小编lns*_*ft0的帖子

为什么“new”的不同使用方式会导致结果与“delete”不兼容?

我正在阅读有关内存的 C++ Primer Plus, 12.1.3,以及有关析构函数的一些内容真的让我感到困惑。

//Here is a default construtor of String class
String::String()
{
   len = 0;
   str = new char[1];
   str[0] = '\0';
}
Run Code Online (Sandbox Code Playgroud)

书上说,使用str = new char[1]not str = new char,两种方式分配相同的内存,但第二种与析构函数不兼容。此外,书中说以下3种方式不好,因为它们与“删除”不兼容

char words[15] = "bad idea";
char *p1 = words;
char *p2 = new char;
char *p3;
delete [] p1; //undefined, so don't do it
delete [] p2; //undefined, so don't do it
delete [] p3; //undefined, so don't do it
Run Code Online (Sandbox Code Playgroud)

我不知道这 3 种方式有什么不同,有人可以向我解释一下吗?非常感谢。

c++ pointers destructor class

0
推荐指数
1
解决办法
108
查看次数

标签 统计

c++ ×1

class ×1

destructor ×1

pointers ×1