动态内存分配C ++使用复制构造函数或默认构造函数

时间:2017-01-12 04:36:40

标签: c++

我有一类类型说

class Property
{
public:
String a;
int b;
map<string, string> c;
Property();
Property(const Property &prop);
};

是另一个类的成员作为指针

class Sample
{
  int a;
  string b;
  Property* prop;
  setProperty();
  Sample( prop = NULL);
 ~Sample(
  delete prop;
);

我的问题是,当我创建一个示例对象时 样本obj; 并想要初始化Property * prop;

prop = new Property();
prop->a = "random string";

//添加东西到地图 是这样做,然后调用单个集函数是一个很好的分配方式?

或者我应该首先声明一个Property Object,然后在动态分配内存之前进行完整的初始化? 声明一个对象

    setProperty()
{
    Property object;
    //initialize it by filling in the string and map and then do within 
    prop = new Property(object);
}

注意以上只是不完整的伪代码。

1 个答案:

答案 0 :(得分:0)

这是一个非常有趣的问题,答案非常简单。 在当前情况下,当涉及编译器是否接受它时,复制构造函数与默认构造函数没有区别。 因此,要首先判断是否应该使用复制构造函数或默认构造函数,我们需要考虑2个因素,性能和内存。

由于复制构造函数和默认构造函数在性能方面几乎没有任何区别,我们将跳过分析性能并获得定义因素内存。

正如TheUndeadFish在评论中所述,与默认构造函数相比,使用复制构造函数效率低下,因为每次要在堆中分配该对象时,都必须堆栈分配一个全新的无用对象。使用默认构造函数,您只需分配一次对象,然后在分配后分配属性,这比使用复制构造函数更有效。

因此,总之,我个人建议在您的情况下使用默认构造函数而不是复制构造函数。