在构造函数中初始化const char * - 会有内存泄漏吗?

时间:2014-04-04 07:04:31

标签: c++

这是我得到的代码:

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,遗憾的是这不适合我的目的。

5 个答案:

答案 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 国际化目的);在任何一种情况下,它都是一个 尝试删除或释放它时出错。