struct Test {
int w, h;
int * p;
};
int main(){
Test t {
10,
20,
new int[this->h*this->w]
};
return 0;
}
我只想在初始化中使用w和h,有什么办法吗?
最佳答案
首先-you should avoid calling new
(and delete
) explicitly,在极少数情况下除外;这不是其中之一。使用std::unique_ptr
来保存分配的内存(请参见下文)。
要回答您的问题:您不能将struct / class的成员用作该struct / class的构造函数的参数。从概念上讲,参数是在构造函数运行之前解析的。
但是,您可以编写一个命名构造函数惯用法:
struct Test {
int w, h;
std::unique_ptr<int[]> p;
static:
Test make(int w, int h) {
return Test{ w, h, std::make_unique<int[]>(w*h) };
}
};
这会让你写:
auto my_test = Test::make(w, h);
另外,您可以直接实现只接受
w
和h
的构造函数:struct Test {
int w, h;
std::unique_ptr<int[]> p;
Test(int w_, int h_) : w(w_), h(_), p(std::make_unique<int[]>(w_*h_) { }
};
...但是您将需要为无参数构造函数和3参数构造函数(如果不是其他方法)编写一些额外的代码。
关于c++ - 如何在C++结构初始化中获取成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62189766/