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

Dynamic Memory Allocation C++ use copy constructor or default constructor

本文关键字:构造函数 复制 默认 内存 分配 C++ 动态      更新时间:2023-10-16

我有一个类型为的类

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 = new Property();
prop->a = "random string";

//将内容添加到地图这样做,然后调用单独的集合函数是进行分配的好方法吗?

或者我应该先声明一个属性对象,然后在动态分配内存之前进行完全初始化?声明对象

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

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

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

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

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

所以,最后,我个人建议在您的情况下使用默认构造函数,而不是复制构造函数。