相关疑难解决方法(0)

动态分配对象数组

这是一个初学者的问题,但我很长一段时间没有做过C++,所以这里......

我有一个包含动态分配数组的类,比方说

class A
{
    int* myArray;
    A()
    {
        myArray = 0;
    }
    A(int size)
    {
        myArray = new int[size];
    }
    ~A()
    {
        // Note that as per MikeB's helpful style critique, no need to check against 0.
        delete [] myArray;
    }
}
Run Code Online (Sandbox Code Playgroud)

但现在我想创建一个动态分配的这些类的数组.这是我目前的代码:

A* arrayOfAs = new A[5];
for (int i = 0; i < 5; ++i)
{
    arrayOfAs[i] = A(3);
}
Run Code Online (Sandbox Code Playgroud)

但这种情况非常糟糕.因为在循环迭代完成时,A(通过A(3)调用)创建的新对象会被破坏for,这意味着myArrayA实例的内部delete []变为-ed.

所以我认为我的语法必定是非常错误的?我想有一些看起来像矫枉过正的修复,我希望避免:

  • 为...创建复制构造函数A …

c++ pointers destructor memory-management copy-constructor

56
推荐指数
3
解决办法
13万
查看次数

类成员和显式堆栈/堆分配

假设我们有4个课程如下:

class A
{
    public:           
        A(void) : m_B()
        {
        }
    private:
        B m_B;
}

class B
{
    public:            
        B(void)
        {
           m_i = 1;
        }
    private:
        int m_i;
}

class C
{
    public:           
        C(void) 
        {
            m_D = new D();
        }
        ~C(void) 
        {
            delete m_D;
        }
    private:
        D *m_D;
}

class D
{
    public:           
        D(void)
        {
           m_i = 1;
        }
    private:
        int m_i;
}
Run Code Online (Sandbox Code Playgroud)

可以说有4种情况:

情况1:在堆栈上外部分配,B在堆栈内部分配

A myA1;
Run Code Online (Sandbox Code Playgroud)

情况2:在堆上外部分配,B内部分配在堆栈上

A *myA2 = new A();
Run Code Online (Sandbox Code Playgroud)

情况3:C在堆栈外部分配,D在堆内部分配

C myC1;
Run Code Online (Sandbox Code Playgroud)

情况4:C在堆上外部分配,D在堆内部分配

C *myC2 = new …
Run Code Online (Sandbox Code Playgroud)

c++ memory heap stack memory-management

26
推荐指数
2
解决办法
2万
查看次数

静态类变量存储在内存中的哪个位置?

这是如何将静态数组存储在Java内存中的后续问题.

因此,C/C++中的全局变量存储在内存的静态数据段中.但是Java/C++中的静态类变量呢?

它不能是静态数据段,因为您不知道在程序的整个过程中将引用什么/多少类(因为反射).它绝对不是堆栈,因为这没有任何意义.将它存储在堆上也是一种不确定的方式.

c++ java memory static-members class-variables

12
推荐指数
1
解决办法
2万
查看次数

成员数组在哪里?

给出以下代码:

class MyClass
{
public:
    char array[10];
};

int main()
{
    MyClass *p = new MyClass;
...
}
Run Code Online (Sandbox Code Playgroud)

据我所知 - new在堆上分配对象.但是,数组也在堆栈上分配(没有新的运算符).

那么,是在堆上分配数组(因为对象在堆中)还是在程序堆栈上?

c++

3
推荐指数
1
解决办法
69
查看次数