除非我弄错了,
Rectangle rect(3,4);
调用带有3和4作为参数的Rectangle的构造函数,但不将创建的对象分配给指针,引用或变量或其他任何对象。
和
Rectangle* rect = new Rectangle(3,4);
创建一个对象和一个指向该对象的指针(new
始终返回一个指针,这就是为什么该类型是指向矩形而不是矩形的指针的原因。)
除了这两种方式之外,还有其他方式可以创建和反对吗?我是否对对象初始化有误解?
编辑:对不起,错字,rect是变量,但不是指针或引用。
答案 0 :(得分:3)
不,有更多方法可以用C ++创建新对象。
根据C ++ 17标准(intro.object / 1):
在隐式更改联合的活动成员时或在创建临时对象时,将通过定义,new-expression创建对象。
示例:
struct Rectangle {
Rectangle(int x, int y);
int x, y;
};
Rectangle rect(3,4); // object created by definition. Object has static storage duration
void fun() {
Rectangle rect(3,4); // object created by definition. Object has automatic storage duration
new Rectangle(3,4); // object created by new expression Object has dynamic storage duration. Note, it is possible to create object without assigning it to any pointer or reference
}
int temp() {
return Rectangle(1, 2).x; // temporary object created with automatic storage duration
// this is just an example and it is not the only way to create temporary object
}
// Following code can be skipped if you don't know about unions yet
struct A {
int x;
};
union B {
A a;
int z;
};
void test() {
B b;
b.a.x = 5; // Creates b.a object.
}
答案 1 :(得分:1)