我正在学习一门 c++
类(class),有些事情我希望能够在一行中完成。我有以下类(class):
class example {
private:
int height, width;
std::unique_ptr<uint8_t[]> pointer = nullptr;
public:
example()
:pointer(new uint8_t[height * width * 3]) // this works
{}
};
但我宁愿像这样初始化 pointer
成员内联:
unique_ptr<uint8_t[]> pointer = new uint8_t[height * width * 3]; // doesnt work
这可能吗?
最佳答案
你可以,这会起作用:
struct P {
size_t height, width;
std::unique_ptr<size_t[]> vals = std::make_unique<size_t[]>(height * width * 3);
};
但是不要这样做。为什么?
如果我这样做:
struct P {
size_t height;
std::unique_ptr<size_t[]> vals = std::make_unique<size_t[]>(height * width * 3);
size_t width;
};
我有未定义的行为,因为我将使用未初始化的width
。至少如果我这样做:
struct P {
P(size_t h, size_t w) :
height{h}, width{w},
vals{height * width * 3}
{} // Initialization in the initialization list
size_t height;
std::vector<size_t> vals;
size_t width;
};
然后会出现一条警告,指出初始化列表中的元素顺序错误。由于我应该将警告作为错误进行编译,幸运的是,我将无法编译这个有缺陷的代码。最后,我使用的是 vector ,这绝对是您正在寻找的,使用起来要好得多:)
关于c++ - 在一行中初始化 pointer(new uint8_t[height * width*3]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57677894/