C++中A *p=new A(99);这是什么意思?A是类

书上说是: //创建一个堆中对象并用p指向它同时初始化
//该对象的成员变量x的值为99

我不明白,这只能是分配给p内容一个地址,这个指针指向A类数据。new A(99);就像new int ;不过是分配的空间大小而已,哪里来的初始化?

A *p=new A(99)
这个括号就是初始化。。。
int *i=new int(10);你试试就知道了。。。
就表示表示动态分配了用于存放整型数据的内存空间,将初值10写入该内存空间,并将首地址值返回指针i,这就是new的用法之一……
参考资料:http://baike.baidu.com/view/571284.htm追问

*p指向的对象叫什么名呢?似乎又没有名?就是说*p指向的是已经初始化但没有具体名称的对象?

追答

用new创建的都是无名对象……不能丢失指向这个无名对象的指针,否则无法delete,就会内存泄漏……
你说那也应该是 A * p = new A; 为何能写成A * p =new A(99); ????

逗,你没写过A p(99) ?????这是一个意思啊……new创建无名对象也能使用构造函数的

追问

这个顺序到底是怎样的呢?就是说先new A 读取类型,然后分配一块堆。然后A(99)初始化往堆里写入具体数据?

再把首地址赋值给p?

追答

A * p =new A(99);就是A q(99); A*p=q;

q是没有名字的,我这里用q表示这个东西给你看。
过程就是这样,创建——初始化——赋值

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-29
表示你用参数99 来生成一个A 的对象
我猜你A的定义 可以这么写
class A
{
int value;
public:
A(int a) :value(a)
{
//do something

}
int GetValue() const {return value;}
};

然后当你需要创建一个A 时,
就用 A* thenewone= new A(99); 这时这个新的A个体,它里面的数据就是按照99的状态来初始化的本回答被网友采纳
第2个回答  2013-06-02
这个叫用new创建无名对象,就是你想建个对象,又不想命名他,就申请一个指针来指向他,这里的指针p就是这个作用。不理解,你可以百度无名对象。
第3个回答  2013-06-02
分配空间直接new A就可以了,
加个括号相当于赋值对于基本类型,类的话可以看成调用了构造函数
相似回答