C++11 在指针方式和非指针方式之间选择哪一种? #包括 甲级{ 公众: A(){std::cout
经验法则:更喜欢在堆栈上创建对象。在堆栈上创建对象时,内存管理的工作量更少。效率也更高 何时必须在堆上创建对象 以下是一些需要它的情况:C++11 在指针方式和非指针方式之间选择哪一种? #包括 甲级{ 公众: A(){std::cout,c++11,C++11,经验法则:更喜欢在堆栈上创建对象。在堆栈上创建对象时,内存管理的工作量更少。效率也更高 何时必须在堆上创建对象 以下是一些需要它的情况: 您需要创建一个仅在运行时才知道数组大小的对象数组 你需要一个对象来超越它所构造的函数 您需要存储和/或传递指向基类类型的指针,但该指针指向派生类对象。在这种情况下,派生类对象很可能需要使用堆内存创建 在“现代”C++(C++ 11)中,指针很少在多态性之外。为什么要这样说呢?因为STD::移动?因为STD::移动避免赋值操作符,并且您可以很容易地在“非指针方式
在“现代”C++(C++ 11)中,指针很少在多态性之外。为什么要这样说呢?因为STD::移动?因为STD::移动避免赋值操作符,并且您可以很容易地在“非指针方式”的一个步骤中进行初始化,例如,例如“代码> A=1;< /Calp>或<代码> A(1)。;,从而跳过赋值步骤。您似乎需要它,它将以正确的方式清楚地指导您。但是,使用堆栈方法时需要执行的赋值运算符又如何呢。1.除非您愿意,否则不需要赋值。您创建的对象具有正确的开始值。2.赋值对于imple类,如您在文章中所做的。(以前是第一条注释,但我需要对其进行编辑)您不必对可变长度数据使用堆,您知道,只要在堆栈上分配之前检查大小…(现在是R Sahu关于“更精细点”的注释)@RSahu当你说除非需要,否则我不必使用assign时是有道理的谢谢你的回复
#include <iostream>
class A{
public:
A(){std::cout << "basic constructor called \n";};
A(const A& other) {
val = other.x
std::cout << "copy constructor is called \n";
}
A& operator=(const A& other){
val = other.x
std::cout << "\n\nassignment operator " << other.val << "\n\n";
}
~A(){
std::cout << "destructor of value " << val <<" called !!\n";
}
A(int x){
val = x;
std::cout << " A("<<x<<") constructor called \n";
}
int get_val(){
return val;
}
private:
int val;
};
int main(){
// non pointer way
A a;
a = A(1);
std::cout << a.get_val() << std::endl;
a = A(2);
std::cout << a.get_val() << std::endl;
// pointer way
A* ap;
ap = new A(13);
std::cout << ap->get_val() << std::endl;
delete ap;
ap = new A(232);
std::cout << ap->get_val() << std::endl;
delete ap;
return 0;
}