Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在堆上声明数组_C++_Arrays_Pointers - Fatal编程技术网

C++ 在堆上声明数组

C++ 在堆上声明数组,c++,arrays,pointers,C++,Arrays,Pointers,在堆上声明数组时,哪种方法更好?为了简单和示例起见,这里公开了私有数据 我应该创建一个新指针,修改数据,然后 CAT *Family = new CAT[2]; for(int i=0; i<2;i++){ Family[i].age = i+1; } CAT*系列=新的CAT[2]; 对于(int i=0;i您的第二个实现将在堆栈上分配更多的变量,并且需要更复杂的汇编代码(我记得必须为上述C风格语言的代码生成汇编代码,这是非常困难的!)。对于额外的点,如果您正在寻求优化,我建

在堆上声明数组时,哪种方法更好?为了简单和示例起见,这里公开了私有数据

我应该创建一个新指针,修改数据,然后

CAT *Family = new CAT[2];

for(int i=0; i<2;i++){
    Family[i].age = i+1;
}
CAT*系列=新的CAT[2];

对于(int i=0;i您的第二个实现将在堆栈上分配更多的变量,并且需要更复杂的汇编代码(我记得必须为上述C风格语言的代码生成汇编代码,这是非常困难的!)。对于额外的点,如果您正在寻求优化,我建议您使用;)

您的第二个实现将在堆栈上分配更多的变量,并且需要更复杂的汇编代码(我记得必须为上述C风格语言的代码生成汇编代码,这是非常困难的!)。为了获得额外的积分,如果您正在寻找优化,我建议您使用;)

您的第二个实现将在堆栈上分配更多的变量,并且将需要更复杂的汇编代码(我记得必须为上述C风格语言的代码生成汇编代码,这是非常困难的!)。为了获得额外的积分,如果您正在寻找优化,我建议您使用;)

您的第二个实现将在堆栈上分配更多的变量,并且将需要更复杂的汇编代码(我记得必须为上述C风格语言的代码生成汇编代码,这是非常困难的!)。为了获得额外的积分,如果您正在寻找优化,我建议您使用;)

直接使用原始指针和
new
通常不是一个好主意

越少越好

相反,要在堆上创建数组,请执行以下操作:

std::vector<Cat> cats( 2 );
for( int i = 0; i < int( cats.size() ); ++i ){
    cats[i].age = i+1;
}
std::病媒猫(2);
对于(int i=0;i
或者,这是:

std::vector<Cat> cats;
for( int i = 0; i < 2; ++i ){
    cats.emplace_back( i+1 );
}
std::病媒猫;
对于(int i=0;i<2;++i){
猫。后置(i+1);
}

直接使用原始数组和<代码>新< /CUL>指示C程序员或不胜任,因为<代码> STD::vector 正是在C++标准库中,为此目的,要注意正确的内存管理。



还请注意,所有大写名称都是用于宏的约定。这样做的目的是最大限度地减少名称冲突和意外文本替换的可能性。当你在其他事情上使用这样的名称时,反而会增加名称冲突和无意中的文本替换的机会,更不用说许多程序员把所有大写字母都读成呼喊、特别强调。

直接使用原始指针和
new
通常不是一个好主意

越少越好

相反,要在堆上创建数组,请执行以下操作:

std::vector<Cat> cats( 2 );
for( int i = 0; i < int( cats.size() ); ++i ){
    cats[i].age = i+1;
}
std::病媒猫(2);
对于(int i=0;i
或者,这是:

std::vector<Cat> cats;
for( int i = 0; i < 2; ++i ){
    cats.emplace_back( i+1 );
}
std::病媒猫;
对于(int i=0;i<2;++i){
猫。后置(i+1);
}

直接使用原始数组和<代码>新< /CUL>指示C程序员或不胜任,因为<代码> STD::vector 正是在C++标准库中,为此目的,要注意正确的内存管理。



还请注意,所有大写名称都是用于宏的约定。这样做的目的是最大限度地减少名称冲突和意外文本替换的可能性。当你在其他事情上使用这样的名称时,反而会增加名称冲突和无意中的文本替换的机会,更不用说许多程序员把所有大写字母都读成呼喊、特别强调。

直接使用原始指针和
new
通常不是一个好主意

越少越好

相反,要在堆上创建数组,请执行以下操作:

std::vector<Cat> cats( 2 );
for( int i = 0; i < int( cats.size() ); ++i ){
    cats[i].age = i+1;
}
std::病媒猫(2);
对于(int i=0;i
或者,这是:

std::vector<Cat> cats;
for( int i = 0; i < 2; ++i ){
    cats.emplace_back( i+1 );
}
std::病媒猫;
对于(int i=0;i<2;++i){
猫。后置(i+1);
}

直接使用原始数组和<代码>新< /CUL>指示C程序员或不胜任,因为<代码> STD::vector 正是在C++标准库中,为此目的,要注意正确的内存管理。



还请注意,所有大写名称都是用于宏的约定。这样做的目的是最大限度地减少名称冲突和意外文本替换的可能性。当你在其他事情上使用这样的名称时,反而会增加名称冲突和无意中的文本替换的机会,更不用说许多程序员把所有大写字母都读成呼喊、特别强调。

直接使用原始指针和
new
通常不是一个好主意

越少越好

相反,要在堆上创建数组,请执行以下操作:

std::vector<Cat> cats( 2 );
for( int i = 0; i < int( cats.size() ); ++i ){
    cats[i].age = i+1;
}
std::病媒猫(2);
对于(int i=0;i
或者,这是:

std::vector<Cat> cats;
for( int i = 0; i < 2; ++i ){
    cats.emplace_back( i+1 );
}
std::病媒猫;
对于(int i=0;i<2;++i){
猫。后置(i+1);
}

直接使用原始数组和<代码>新< /CUL>指示C程序员或不胜任,因为<代码> STD::vector 正是在C++标准库中,为此目的,要注意正确的内存管理。



还请注意,所有大写名称都是用于宏的约定。这样做的目的是最大限度地减少名称冲突和意外文本替换的可能性。当你在其他事情上使用这样的名称时,反而会增加名称冲突和无意中的文本替换的机会,更不用说许多程序员将所有大写字母都理解为呼喊、特别强调。

第一种方法在调用构造函数的次数方面具有明显的优势。对于你这个微不足道的例子,这很好。然而,假设一个类在c'tor中进行大量资源分配,并在d'tor中释放它们。 第二种方法称之为c'tor和d'tor 2T