簡化代碼是這樣的:
class A
{
public:
int length();
}
class B
{
private:
A* a;
public:
A* getA(){return a};
}
int main()
{
B b;
int len=b.getA().length();
}
結果就會呼叫解構式把我的b內容給改變了,想了半天沒想明白,各位大佬救救孩子吧!!!
uj5u.com熱心網友回復:
這沒運行出錯?b.getA()回傳空指標,還是說你省略了給b.a初始化的代碼?uj5u.com熱心網友回復:
getA()回傳的a是沒有初始化的對于這個沒有初始化的指標, 呼叫它的方法必然會出錯
uj5u.com熱心網友回復:
我簡化的有問題,源代碼這些都是初始化了的,然后我修改了一下,在類B里面添加了一個函式
void getLength()
{
return a->length();
}
就好了,但是我不太清楚具體的原因。
uj5u.com熱心網友回復:
#include<stdio.h>
class A
{
public:
int length = 9;
};
class B
{
private:
A* a;
public:
B()
{
a = new A;
}
A* getA(){return a;}
};
int main()
{
B b;
int len = b.getA()->length;
printf("len: %d\n", len);
return 0;
}
len: 9
Process finished with exit code 0
uj5u.com熱心網友回復:
指標呼叫其內的成員使用 ->
uj5u.com熱心網友回復:
寫錯了
不過我的length是成員函式我的問題就是用雙向回圈鏈表實作任意長度整數的加減法,然后我的類A是鏈表類,B是整數類,然后getA()就是獲取頭結點,length()是獲取那個鏈表的長度,當我寫了int len = b.getA()->length();我的這個b里面的鏈表a就析構沒了(空鏈表了),不知道為啥。是回傳值return a;區域變數被析構了嗎?
第一次用這個論壇,老是寫錯,抱歉!
uj5u.com熱心網友回復:
也沒看到你解構式啊uj5u.com熱心網友回復:
必須new,你的簡化是錯誤的,在建構式里寫轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/131829.html
標籤:C++ 語言
