我有一类类型说
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);
}
注意以上只是不完整的伪代码。
答案 0 :(得分:0)
这是一个非常有趣的问题,答案非常简单。 在当前情况下,当涉及编译器是否接受它时,复制构造函数与默认构造函数没有区别。 因此,要首先判断是否应该使用复制构造函数或默认构造函数,我们需要考虑2个因素,性能和内存。
由于复制构造函数和默认构造函数在性能方面几乎没有任何区别,我们将跳过分析性能并获得定义因素内存。
正如TheUndeadFish在评论中所述,与默认构造函数相比,使用复制构造函数效率低下,因为每次要在堆中分配该对象时,都必须堆栈分配一个全新的无用对象。使用默认构造函数,您只需分配一次对象,然后在分配后分配属性,这比使用复制构造函数更有效。
因此,总之,我个人建议在您的情况下使用默认构造函数而不是复制构造函数。