【发布时间】:2013-02-26 05:10:05
【问题描述】:
我想问一下功能上的区别;也许要求一个示例场景,我应该从以下主要方法中的一个选项中进行选择:
#include <iostream>
using namespace std;
class A{
private:
int x, y;
public:
A(int, int);
};
class B{
private:
int *x, *y;
public:
B(int, int);
~B();
};
A:: A(int x, int y){
this->x = x; this->y = y;
}
B:: B(int x, int y){
this->x = new int(x);
this->y = new int(y);
}
B:: ~B(){
delete this->x;
delete this->y;
}
int main(){
int x = 0, y = 0;
A* objA = new A(x, y); // line 1
B objB1(x, y); // line 2
B* objB2 = new B(x, y); // line 3
delete objA;
delete objB2;
return 0;
}
我知道主方法B objB1(x, y) 中的第二个声明与其他两个明显不同,但是有人可以解释一下标记为第 1 行和第 3 行的构造函数之间的功能差异吗?两种声明中是否有任何不良做法?
谢谢
NAX
更新
首先,我感谢大家给出的所有答案,我真的得到了一些很好的见解。我已经编辑了上面的代码,因为一些答案指出我没有删除我使用的对象,这是公平的,但这不是我问题的目的。我只是想深入了解创建类的不同方法之间的功能差异。感谢所有针对这一点的人。我还在阅读答案。
【问题讨论】:
-
坚持
A类和第 2 行声明。 -
阅读this,然后仔细查看您的代码并考虑哪些可能是“不好的做法”。
-
@naxchange 您实际上是在询问标记为 1 和 3 的行或 A 类和 B 类之间的区别吗?因为除了构造不同类型的对象之外,这两行是相同的。
-
@YaserZhian 好吧,我只是想知道在类定义和对象定义方面哪个才是真正更好的做法,因为上面的所有构造函数都是允许的。不过,当我阅读答案时,我想我应该早点看到它。
-
@WhozCraig 在上面的评论中发布的链接实际上非常棒,它在不同的层面上回答了我的问题。
标签: c++ class heap-memory dynamic-memory-allocation