C++ 调用我的return方法调用我的析构函数,这会使我的程序崩溃

C++ 调用我的return方法调用我的析构函数,这会使我的程序崩溃,c++,C++,希望我不会把我的代码说得太多 Index::Index() : m_first(""), m_count(0) { m_ll = new LinkedList; } void TestClass::testMethod() { if (getIndex(i).getCount() != 0) { //do stuff } } Index TestClass::getIndex(int num) const { return m_index[

希望我不会把我的代码说得太多

Index::Index() : m_first(""), m_count(0)
{
    m_ll = new LinkedList;
}
void TestClass::testMethod()
{
    if (getIndex(i).getCount() != 0)
    {
        //do stuff
    }
}
Index TestClass::getIndex(int num) const
{
    return m_index[num];
}
Index::~Index()
{
    delete m_ll;
}

这是真正与崩溃有关的代码。当我进入testMethod时,我有m_index[num],它包含一个指向m_ll的指针。它们是完全有效的。在返回m_index[num]之后,它进入析构函数,即使m_index[num]仍在使用,因此,我的程序崩溃。我不明白为什么会这么早调用析构函数。

dtor调用
delete
getIndex
按值返回。我的水晶球告诉我,
Index::Index()
调用
new
,但
Index::Index(Index const&)
不调用。

显示更多的代码。使用所有警告和调试信息(
g++-Wall-Wextra-g
)进行编译,然后使用调试器(
gdb
),由
getIndex
返回的
索引可能会在
if
条件表达式末尾被销毁。也许你想返回一个引用?也许你的复制构造函数坏了?下面是关于你的问题中应该包含哪些代码部分的一些想法:很抱歉,我没有包含Index::Index()。我刚刚加了一句,但你是对的。唯一的问题是,我根本没有复制构造函数。“我想我需要一个叫新的吗?”迈克尔·莱克:是的。这就是所谓的。简短版本。@MichaelBlake:您有一个副本<否则,code>getIndex
就不会编译。但是,它是默认的memberwise copy-ctor,它只复制指针。这意味着您将得到两个相同的索引对象,它们都将在同一指针上调用
delete