use*_*462 1 c++ memory smart-pointers
我的代码出现错误。\n我在类 <RenderPass> 中使用前向声明,std::unique_ptr<RenderPass> 工作良好。但是 std::vector<std::unique_ptr<RenderPass>> 会导致编译错误。\n以前有人遇到过这种情况吗?谢谢\xef\xbc\x81
\nclass RenderPass;\n\nclass RenderSystem final\n{\npublic:\n RenderSystem() = default;\n ~RenderSystem();\n\nprivate:\n std::unique_ptr<RenderPass> c {} // work;\n std::vector<std::unique_ptr<RenderPass>> m_render_passes {} // compile error: error C2338: static_assert failed: 'can't delete an incomplete type';\nRun Code Online (Sandbox Code Playgroud)\n
这是因为您对向量进行了内联初始化。这需要元素类型的完整定义。
如果您RenderSystem在具有完整定义的源文件中定义构造函数,RenderPass则可以使用其初始化列表来初始化向量。
因此类定义将如下所示:
class RenderPass;
class RenderSystem final
{
public:
RenderSystem();
~RenderSystem();
private:
// Note: No inline initialization of the vector
std::vector<std::unique_ptr<RenderPass>> m_render_passes
};
Run Code Online (Sandbox Code Playgroud)
在源文件中:
#include "header_file_for_renderpass.h"
RenderSystem::RenderSystem()
: m_render_passes {}
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |