[英]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(或更多)次的基礎知識,但無濟於事。 我希望我想要做的事實際上是可能的。 如果沒有,最接近的是什么?
你因為而遇到了未定義的行為
var=new int[2];
被釋放
delete var;
而不是delete[] var;
。
您應該使用std::vector<int>
。 這樣,您無需擔心析構函數/復制構造函數/賦值運算符。
另外,請注意
int Base::func(int b){
return b++;
}
基本上是無操作,因為返回了之前的b
值。 你的意思是return b+1
嗎?
你有兩個問題:
細節:
delete var;
應該:
delete []var;
new
要求delete
, new[]
要求delete []
,mismtach會導致Undefined Behavior。
建議:
您應該使用std::vector
或std::array
而不是動態c樣式數組。 它將為您節省所有的努力,並且它們不易出錯。
如果你不喜歡這個例子中的向量,你可以使用std :: pair,但是可以使用向量。 幾個月來我沒有使用過陣列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.