[英]object construction [c++]
我有這個 class:
class A {
B b;
// snip.
}
只要 B 有一個不使用 arguments 或默認構造函數的構造函數,這將正常工作。
但是,如果需要將B構造成B(x),代碼應該如何修改。 一種明顯的方法是使用 new/delete 和 B* 但我很好奇是否可以不使用動態 memory?
使用member-initialization-list將成員變量初始化為:
class A {
B b;
C c;
public:
A() : b(10){} //if B's constructor takes int, for example!
//Or
A(T x) : b(x), c(x) {}
//^^^^^^^^^^^^ this is called member-initialization-list
}
new
/ delete
無濟於事。 您要么需要 A 的構造函數...
A::A(X x) : b(x) { }
...或使用結構初始化...
A a = { B(x) };
兩種可能:
在 A 的構造函數中使用初始化列表
A::A(int x):b(x)
{
}
或者,如果不能直接在A的構造函數中構造b,則需要有一個指針
class A
{
B * b;
}
一種明顯的方法是使用 new/delete 和 B* 但我很好奇是否可以不使用動態 memory?
通常,您也可以使用指針或向 class B 添加一個構造函數,以便它可以傳遞參數來初始化 object A,正如許多答案已經提到的那樣。
但在某些特殊情況下,您可能能夠在不向 class B 添加構造函數且沒有指針的情況下逃脫,而是在 class B 未定義構造函數時通過值初始化:
struct B{
int i;
};
struct A{
B b;
};
int main()
{
A a ={1}; //here i being initialized to 1
}
請注意我不推薦這個值初始化,只是為了讓你知道object可以用這種方式初始化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.