C++指针管理与局部变量

标签 c++ pointers memory-management

我有一个方法可以创建一些 Foo 并将其添加到 Foos 的 vector 中。 Foos 负责在销毁期间删除其 Bars。 Foo 构造函数采用 Bars 的指针和它们的大小。当函数返回时,本地 Foo 被删除并销毁它的 Bars,但是我得到一个有效的 Foo 对象。

我应该如何更正确地处理这个问题?我应该以其他方式管理 Bars 吗?我应该让构造函数复制数组吗?我可能会拥有数十万个 Bars。

还没有尝试编译这个,这只是正在发生的事情的一个例子。

class Bar
{
    public:
        Bar(){}
        ~Bar(){}

        int a;
        int b;
        int c;
};

class Foo
{
    private:
        Bar * myBars;
        int size;

    public:
        Foo(Bar * myBars, int size)
        {
            this->myBars = myBars;
            this->size = size;
        }

        Bar * getBars()
        {
            return myBars;
        }

        int getSize()
        {
            return size;
        }

        ~Foo()
        {
            if(myBars != NULL)
            {
                if(size == 1)
                {
                    delete myBars;
                }
                else if(size > 1)
                {
                    delete [] myBars;
                }
            }
        }
};

void doIt(std::vector<Foo> & foos)
{
    Bar * myBars = new Bar[4];
    //Pretend we initialize the Bars...
    Foo foo(myBars);
    foos.push_back(foo);

    //local foo gets deleted
}

int main()
{
    std::vector<Foo> foos;
    doIt(foos);

    Bar * myBars = foos[0].getBars();
    int size = foos[0].getSize();

    //Do something with myBars

    return 0;
}

最佳答案

为什么不对 Bar 使用 std::vector:

class Foo
{
    private:
        vector<Bar> myBars;

    public:
        Foo(const vector<Bar>& bars) : myBars(bars) {}

        vector<Bar>& getBars()
        {
            return myBars;
        }

        int getSize()
        {
            return myBars.size();
        }
};

关于C++指针管理与局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3960845/

相关文章:

c++ - 在 .cpp 文件之间传递全局字符串变量?

c++ - 当您的应用程序开始耗尽内存时,您会怎么做?

pointers - 在结构字段中使用指针的区别

c - 关于C中的指针运算

iphone - iOS 基本内存管理

java - 我已经在 Eclipse 中更改了内存大小,但仍然收到 java.lang.OutOfMemoryError

c++ - 这段C++代码有什么问题?

c - 获取条件表达式的地址

C++ 内存分配器 vptr/new 实现

c++ - 查找模板类型的模板类型 C++