相关疑难解决方法(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万
查看次数

包含其他对象的类的C++隐式复制构造函数

我知道如果你没有自己实现,编译器有时会提供一个默认的复制构造函数.我很困惑这个构造函数到底是做什么的.如果我有一个包含其他对象的类,其中没有一个具有声明的复制构造函数,那么行为是什么?例如,像这样的类:

class Foo {
  Bar bar;
};

class Bar {
  int i;
  Baz baz;
};

class Baz {
  int j;
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我这样做:

Foo f1;
Foo f2(f1);
Run Code Online (Sandbox Code Playgroud)

默认的复制构造函数会做什么?将编译器生成的复制构造函数Foo调用编译器生成的构造函数Bar进行复制bar,然后调用编译器生成的复制构造函数Baz吗?

c++ contains composition default-copy-constructor

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