只是一个简单的问题。正如标题所示,我只使用“new”运算符来创建类的新实例,所以我想知道另一种方法是什么以及如何正确使用它。
答案 0 :(得分:29)
您还可以将您的课程的自动实例用作new
,因为:
class A{};
//automatic
A a;
//using new
A *pA = new A();
//using malloc and placement-new
A *pA = (A*)malloc(sizeof(A));
pA = new (pA) A();
//using ONLY placement-new
char memory[sizeof(A)];
A *pA = new (memory) A();
最后两个使用placement-new,与 new 略有不同。 placement-new用于通过调用构造函数来构造对象。在第三个示例中,malloc
仅分配内存,而不调用构造函数,这就是 placement-new 用于调用构造函数构造对象的原因。
另请注意如何删除内存。
//when pA is created using new
delete pA;
//when pA is allocated memory using malloc, and constructed using placement-new
pA->~A(); //call the destructor first
free(pA); //then free the memory
//when pA constructed using placement-new, and no malloc or new!
pA->~A(); //just call the destructor, that's it!
要了解什么是贴牌新品,请阅读以下常见问题解答:
答案 1 :(得分:5)
您可以声明一个普通变量:
YourClass foo;
答案 2 :(得分:2)
任何常用方法:作为本地或静态变量,或作为
暂时的。通常,您在C ++中使用new
的唯一情况是
当对象具有身份而生命周期没有
对应于范围,或者它是多态的。 (有
例外,当然,但并不多。)如果对象可以
复制后,通常最好使用本地实例,复制
那些根据需要。 (就像你对int
所做的那样,事实上。)
答案 3 :(得分:0)
使用malloc会给你与new相同的结果,只需不调用构造函数。
答案 4 :(得分:-3)
不应使用new创建C ++中的大多数对象。相反,您应该以与创建整数或布尔值相同的方式创建它们:
class Person {
...
};
int main() {
int x = 3;
boolean b = true;
Person p( "fred" );
}
使用new创建对象应该保留用于需要多态的情况,或者可能需要创建多个对象时,但是在编译时你不知道有多少。