在类中动态数组和指针,找到定义它们的正确方法
Dynamic array and pointer in a class trouble finding the right way to define them
我希望构造函数创建一个动态数组,并分配给构造函数的参数传递给数组成员。
我在标题中拥有的简化版本:
//in classes.h
#ifndef classes_h
#define classes_h
#include <iostream>
class Base{
int a,*var;
public:
Base();
Base(int);
~Base();
int func(int);
};
#endif
和 *.cpp:
//In classes.cpp
#incldue "classes.h"
Base::Base(int a){
var=new int[2];
var[0]=a;
var[1]=func(a);
}
Base::~Base(){
delete var;
}
int Base::func(int b){
return b++;
}
int main(){
Base obj(1);
return 0;}
我需要能够将该数组传递给可以以某种方式修改它的函数,但是我实际上在定义数组时遇到了更多麻烦...
我没有从编译器或链接器中遇到任何错误,但是通过调试,我得出了结论,问题是围绕数组的创建。
我介绍了指针,动态阵列和类3(或更多)次的基础知识,但无济于事。我希望我想做的实际上是可能的。如果没有,最接近的东西是什么?
您有两个问题:
- 您不遵循三个的规则。
- 您有一个未定义的行为。
详细信息:
delete var;
应该是:
delete []var;
new
需要delete
和new[]
需要delete []
,不确定的行为导致不确定的行为。
建议:
您应该使用std::vector
或std::array
而不是动态C风格数组。它将为您节省所有的努力,并且易于错误。
由于
var=new int[2];
被释放
delete var;
而不是delete[] var;
。
您应该改用std::vector<int>
。这样,您不必担心destructor/copy构造函数/分配运算符。
另外,请注意
int Base::func(int b){
return b++;
}
基本上是一个no-op,因为返回了b
的先前值。您是说return b+1
?
如果您不喜欢此示例中的向量,则可以使用std ::配对,但是向量是要走的方法。我几个月都没有使用过数组。
相关文章:
- 在父类中为多个子类定义方法
- 在.cpp文件中定义方法而不是在 C++ 的 .h 文件中定义方法时,如何提高代码的性能?
- 对已定义方法的未定义引用
- 需要派生的类来定义方法
- 在某些名称空间中定义方法时,在全局名称空间中声明
- 在类 C++ 中重定义方法
- 这两种定义方法的样式之间是否存在差异
- 对已定义方法的未定义引用、标头中的声明和源匹配
- 如果未在类 c++ 中定义方法,如何在类对象上使用方法
- 在为嵌入式类定义方法时,有没有办法避免重复包含类
- 有关C++中一个或多个乘法定义方法的错误
- 在 cpp 文件中定义方法时未解析外部,但在标头中定义时未解析
- 是否允许所有未使用的未定义方法
- 如何在声明之外为专门用于无参数的可变模板类定义C++方法
- 什么是编程语言为派生类重新定义方法的能力
- 在C++中,在类定义内部或外部定义方法体是否更为传统
- 向std::vector或typdef添加自定义方法
- 如果在头文件中定义方法,内联关键字有什么用?
- C++ 我知道数组长度,但想知道是否是一种更简洁的数组元素定义方法
- 在类作用域内定义方法时,除非在原始 cpp 文件中的其他位置调用方法,否则项目不会编译