我应该做一个简单的操作,但我很难弄清楚出了什么问题。
我的头文件中有一个私有属性,如下所示:
#pragma once
#include "Sprite.h"
#include "MainMenuContent.h"
class MainMenu
{
public:
MainMenu();
void Initialize(ID3D11Device* device, ID3D11DeviceContext* context, int width, int height,
std::unique_ptr<Sol::Library::Content::UI::MainMenuContent> &content);
void Draw();
void OnDeviceLost();
~MainMenu();
private:
//...some other properties
std::unique_ptr<Sol::Library::Graphics::Sprite> m_title;
};
我正在尝试在初始化方法中分配它,如下所示:
void MainMenu::Initialize(ID3D11Device* device, ID3D11DeviceContext* context, int width, int height,
std::unique_ptr<MainMenuContent> &content)
{
//...some other code that seems to work ok
m_title = std::make_unique<Sol::Library::Graphics::Sprite>(); //<--this throws the error
}
但是我收到了一个错误:
Exception thrown: read access violation.
**std::_Unique_ptr_base<Sol::Library::Graphics::Sprite,std::default_delete<Sol::Library::Graphics::Sprite> >::_Myptr**(...) returned 0x8. occurred
作为参考,我的Sprite类的构造函数中没有任何内容,它在它自己的头文件中声明:
#pragma once
namespace Sol
{
namespace Library
{
namespace Graphics
{
class Sprite
{
public:
Sprite();
virtual void Update();
void Draw(std::unique_ptr<DirectX::SpriteBatch> &sb);
void OnDeviceLost();
~Sprite();
private:
Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> m_tex;
DirectX::SimpleMath::Vector2 m_pos;
DirectX::SimpleMath::Vector2 m_ori;
};
}
}
}
Sprite类的定义:
#include "pch.h"
#include "Sprite.h"
using namespace std;
using namespace DirectX;
namespace Sol
{
namespace Library
{
namespace Graphics
{
void Sprite::Update()
{
}
void Sprite::Draw(unique_ptr<SpriteBatch> &sb)
{
sb->Draw(m_tex.Get(), m_pos, nullptr, Colors::White, 0.f, m_ori);
}
void Sprite::OnDeviceLost()
{
m_tex.Reset();
}
Sprite::~Sprite()
{
}
}
}
}
你们提供的任何帮助都会非常感激。