c++返回保存在已删除动态对象中的字符串

标签 c++

免责声明:Java 开发人员学习 C++。

当您返回包含在已删除动态对象中的字符串时会发生什么?

这是一个相当标准的出队方法,我想让它工作而不使用模板数据的指针,它是我的测试用例中的一个字符串。

Ubuntu 13.04 上的 g++ 出现段错误。在最新的 OSX 上,我的数据已损坏。

是我的代码还是 C++?

// remove an object from the front of the queue.
// the test case instantiate T as string. 
// front->data is assigned an static string.
template<class T>
T & SomeQueue<T>::dequeue() {
    if (empty()) throw runtime_error("kaboom");

    T tmp = front->data;
    Node<T> *n = front;
    front = front->next;
    delete n;

    return tmp;
};

最佳答案

正如约翰所说,删除对象的拷贝没问题。它崩溃是因为您正在返回对局部变量 ( tmp) 的引用。当函数返回时,这个对象不再存在,所以你不能使用它。更改 T & SomeQueue<T>::dequeue进入T SomeQueue<T>::dequeue所以你返回一个 T 的拷贝对象,而不是引用。

(而且,如果您在编译时启用警告,大多数编译器都会告诉您此类事情)。

关于c++返回保存在已删除动态对象中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19195374/

相关文章:

c++ - 将菜单项位置引用到同一菜单中的另一个菜单项

c++ - 默认赋值运算符可以访问基类的私有(private)成员

c++ - Qt QGridLayout - 删除项目间距

c++ - 为什么必须提供 std::make_shared 类型信息而 std::make_pair 不必提供?

c# - C++ 中的嵌入式 Mono 启动 C# ServiceBase

c++ - 从堆栈地址形成指针范围是未定义的行为吗?

c++ - 当参数未知时如何传递函数指针

c# - 从 C#/WPF 到 C++/Qt 的转换 : dinamically generate a button list

c++ - 为什么 std::uncaught_exception 会变成 std​​::uncaught_exceptions?

c++ - const 函数可以在 C++ 中递归,只要它修改可变变量吗?