类中的动态内存(分配内存和访问元素)

时间:2014-01-04 07:31:57

标签: c++

我有一个简单的课程aClass

class aClass
{
public:
    aClass(int size)
    {
        condition = new bool[size];
    }
    ~aClass()
    {
        delete condition;
    }
    bool getCondition(int i) const
    {
        return condition[i];
    }

    void setCondition(bool* condition, int i)
    {
        *(this->condition + i) = *condition;
    }
private:
    bool* condition;
};

实际上我定义了一个bool指针并使用构造函数来分配内存。

#include <iostream>
#include "aClass.h"
using namespace std;

int main()
{
    aClass tempVar(10);
    bool *pC;

    for (int i = 0; i < 10; i++)
    {
        *pC = 0;
        tempVar.setCondition(pC, i);
    }
   for (int i = 0; i < 10; i++)
   {
         cout  <<  tempVar.getCondition(i);
   }
    return 0;
}

我不知道此代码中的问题是什么。

我使用gcc 4.6.3版来编译代码。

2 个答案:

答案 0 :(得分:4)

尽管您从未初始化指针,但您尝试取消引用pC。可能pC应该有bool类型,而不是bool*,同时*pC = 0应该pC = 0,而setCondition可能会bool bool* 1}}不是delete

delete[]虽然它应该是aClass,但请参阅此处原因:delete vs delete[]

如果在某处复制std::vector的实例,您的代码将尝试删除已分配的内存两次。请参阅Rule of three

您应该使用{{1}}而不是手动分配的数组。

答案 1 :(得分:2)

这里有两个相互排斥的问题:

  1. 您尚未初始化pC。这样做:

    int main() {
        ⋮
        bool * pC = new bool;
        ⋮
        delete pC;
    }
    

    实际上,原始指针不是一个好主意,所以这更好:

        std::unique_ptr<bool> pC(new bool);
        // No delete required.
    
  2. setCondition()根本不需要指针参数:

    class aClass {
        ⋮
        void setCondition(bool cond, int i) {
            condition[i] = cond;
        }
        ⋮
    };
    
    int main() {
        ⋮
        for (int i = 0; i < 10; ++i) {
            tempVar.setCondition(false, i);
        }
        ⋮
    }