C++ 将原始指针包装在容器双端队列中的类中不起作用?

问题描述

显示问题的示例源代码

#include<iostream>
#include<deque>
#include<memory>


using namespace std;


class Element
{
public:
    Element()
    {
        fptr = new float[10];
        ele1 = 0;
    }
    ~Element()
    {
        if (fptr != NULL)
            delete[] fptr;

    }
    void print()
    {
        cout<<"ele1: "<< ele1 <<endl;
        for(int i = 0; i != 10; i++)
        {
            cout<<"ele "<<i<<": "<<fptr[i]<<endl;

        }
    }
    float ele1;
    float* fptr;
private:

};

void InsertElement(deque<Element>& dq)
{
    Element el;
    float* z = new float[10];
    for(int i = 0; i != 10; i++)
        z[i] = i;

    for(int i = 0; i != 10; i++)
        el.fptr[i] = z[i];
    el.ele1 = 10;

    dq.push_back(el);


}



int main(int argc,char* argv[])
{
    deque<Element> dq;

    cout<<dq.size()<<endl; // check size of the dequeue.
    InsertElement(dq); // insert a Element with a buffer of float[10]
    dq.front().print();

    return 0;
}

执行上述代码的结果:

0
ele1: 10
ele 0: -1.5884e+038
ele 1: -1.5884e+038
ele 2: -1.5884e+038
ele 3: -1.5884e+038
ele 4: -1.5884e+038
ele 5: -1.5884e+038
ele 6: -1.5884e+038
ele 7: -1.5884e+038
ele 8: -1.5884e+038
ele 9: -1.5884e+038

为什么这些值不符合预期,它们已在 InsertElement 函数内部修改,并且 dq 是通过引用传递的。我不知道上面的代码有什么问题? 很明显,不是数组一部分的 ele1 已经获得了在 InsertElement 函数中分配的值,而不是大批。即使我们为它分配了 0 到 9 的值,该数组似乎还没有初始化。为什么会有这种奇怪的行为?请帮我解释一下,我真的很困惑。

代码的另一个问题: 由于delete[],调用Element类的析构函数时,在程序结束时抛出异常。我之前修复过,但现在的代码导致异常。不知道为什么。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)