gpt4 book ai didi

c++ - 如何延迟 C++ 基类中成员的初始化,直到执行派生类的构造函数?

转载 作者:太空宇宙 更新时间:2023-11-04 15:28:57 39 4
gpt4 key购买 nike

场景如下:我想定义一个基类,它为所有派生类分配一次缓冲区,而缓冲区的大小因不同的派生类而异。我可以通过这种方式实现它:

class base
{
public:
base():size(), p_array(0){}
private:
size_t size;
boost::shared_array<unsigned char> p_array;

};

在派生类中:

class derived
{
public:
derived(size_t array_size):size(array_size)
{
p_array.reset(new unsigned char[size]);
}
};

但是,为了简化派生类的设计,我真的很想放这行:

p_array.reset(new unsigned char[size]);

到基类的某个地方,因此只写一次。是否有任何 C++ 设计模式可以实现它?谢谢。

最佳答案

抱歉,为什么你有 2 个数组(和 2 个大小)?现在,如果您创建一个派生类,您将拥有 2 倍的 p_array。我认为编译器应该给出一个错误。

你不想要这个吗?

class base
{
public:
base():size(), p_array(0){}
base(size_t array_size):size(array_size)
{
p_array.reset(new unsigned char[size]);
}
private:
size_t size;
boost::shared_ptr<unsigned char> p_array;

};

class derived
{
public:
derived(size_t array_size):base(array_size)
{
}
private:
};

关于c++ - 如何延迟 C++ 基类中成员的初始化,直到执行派生类的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/680672/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com