这是我得到的代码:
struct ChoiceLine
{
const char *prompt;
ChoiceLine(const char *pr):
prompt(pr) //can this cause a memory leak?
{
;
}
};
...
ChoiceLine choiceLine("hello world");
使用另一个const char*
初始化const char*
是否可以?
PS:我知道std::string
,遗憾的是这不适合我的目的。
答案 0 :(得分:3)
没有动态内存分配,因此没有内存泄漏。您的数据成员只指向字符串文字。这相当于这样做:
const char* c = "Hello, World!";
答案 1 :(得分:3)
是的,如果有点不安全,那很好:与prompt
相关联的内存不属于类实例。
(在您的特定情况下ChoiceLine choiceLine("hello world");
一切都会很好,因为字符串文字将持续程序的生命周期)。
因此,只要类实例在范围内,就必须保留在范围内。
如果我是你,我会使用std::string
作为你的班级成员并遭受深刻的复制。
答案 2 :(得分:1)
没有内存泄漏,因为没有动态分配。
'提示'所需的空间只是一个指针,并且由编译器有效地分配。
答案 3 :(得分:1)
没有内存泄漏。直到你动态分配一些内存。
答案 4 :(得分:0)
这取决于你不能使用std::string
的原因,以及你的原因
上课应该做的。正如你所写,它基本上就是这样
将内存管理留给调用者;通常,这样
当只有合理的参数时才使用类
字符串文字(具有静态生命周期)。其他
上下文,我已经使用这些类来管理指向字符串的指针
(或其他东西)由库使用C接口返回;在
这种情况下,类的整个目的是释放字符串
在它的析构函数中(通常通过调用一个特定的函数)
库接口,而不是delete[]
或free
)。
您示例中的名称表明您处于第一位
case:prompt
几乎可以肯定是字符串文字或
一个字符串在具有静态生命周期的字典中查找(for
国际化目的);在任何一种情况下,它都是一个
尝试删除或释放它时出错。