簡體   English   中英

類中的動態數組和指針很難找到定義它們的正確方法

[英]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嗎?

你有兩個問題:

  1. 你沒有遵循三法則
  2. 您有一個未定義的行為

細節:

delete var;

應該:

delete []var;

new要求deletenew[]要求delete [] ,mismtach會導致Undefined Behavior。

建議:

您應該使用std::vectorstd::array而不是動態c樣式數組。 它將為您節省所有的努力,並且它們不易出錯。

如果你不喜歡這個例子中的向量,你可以使用std :: pair,但是可以使用向量。 幾個月來我沒有使用過陣列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM