编程面试示例

时间:2015-04-25 17:01:55

标签: c++ memory-management

class string {

public:

    string( char const* t ) : s(t) {}

    ~string() { delete s; }

    char const* c_str() const { return s; }

private:

    char const* s;

};  

我被问到上面有什么内存问题,现在我一般都不会看到记忆,甚至不用C语言编程,所以我不知道,现在从我所知道的一点点C,我认为问题在于没有明确的内存分配和const *错误,但是,我在这里提出问题,看看其他人的想法。

3 个答案:

答案 0 :(得分:4)

从类定义中不清楚谁负责删除指针。如果构造函数的参数是指向字符串文字的第一个字符的指针,该怎么办。在这种情况下,使用删除(更确切地说是删除[])只是错误。

还不清楚它是否是指向单个字符的指针并且必须使用delete,或者它是指向数组第一个字符的指针,并且必须使用delete []。

P.S。我总是想知道为什么有些程序员会尝试在面试中解决一些任务。面试不是考试。如果要求您解决某些任务,那么这意味着您正在处理不尊重您的白痴。 从不在面试中做任何作业。

答案 1 :(得分:2)

构造函数不为其参数分配任何内存;它只是保存指针。当析构函数被调用时,它将释放其他人分配的内存。

答案 2 :(得分:2)

这里有几个(记忆)问题:

  1. 构造函数只生成 t shallow copy并将其存储在 s
  2. (由1引起):析构函数释放由其他人分配的内存(或者更糟糕的是,如果 s 没有指向内存块的开头或字符串,则调用UB文字。