Я сталкиваюсь с ошибкой незаконного доступа, но я не уверен, что происходит в моем коде …
У меня есть такой класс:
class MyClass
{
cHapticDeviceHandler* handler;
public:
MyClass(void){handler = new cHapticDeviceHandler();}
~MyClass(void){delete handler;}
cHapticDeviceHandler* getHandler() {return handler;}
};
Если я создаю такую функцию, мой код просто работает. Я могу создать новый объект и использовать этот метод getHandler (), чтобы использовать cHapticDeviceHandler * без проблем.
function A(){
MyClass* obj1 = new MyClass();
...
}
Однако, если я попытаюсь сделать что-то вроде этого …
function B(){
MyClass* obj1 = new MyClass();
MyClass* obj2 = new MyClass();
}
Первый obj1 создается без проблем, а второй просто падает с ошибкой нелегального доступа при выполнении конструктора.
Если я не ошибаюсь, когда вы создаете новые объекты из класса, их атрибуты отличаются, поэтому у каждого объекта есть свои атрибуты. Имея это в виду, я подчеркиваю, что эти указатели cHapticDeviceHandler различаются в двух объектах, поэтому я не могу понять, почему создание нового в первую очередь работает, а повторное выполнение просто не будет работать.
Я почти уверен, что делаю что-то действительно не так и смущаюсь … я не могу найти, в чем проблема: $
Может ли кто-нибудь дать мне подсказку, пожалуйста? Я вынужден использовать Visual Studio 2008, и я использую CHAI3D, на случай, если это важно.
Я предполагаю, что вы не можете создать более одного экземпляра cHapticDeviceHandler. Поэтому, когда вы создаете первый объект MyClass, у вас все хорошо, но когда вы создаете второй объект MyClass, он попытается создать экземпляр другого cHapticDeviceHandler, и это не будет разрешено. Может ли быть так, что у вас есть только одно устройство, и поэтому у вас не может быть двух обработчиков для него?
Без дополнительной информации я могу только догадываться. Кажется, проблема в том, что вы пытаетесь создать более одного экземпляра cHapticDeviceHandler
, Может быть, он не поддерживает создание более одного экземпляра, например потому что он использует некоторые static
данные или использует эксклюзивные ресурсы (см. драйвер устройства)?
Обратитесь к документации или коду cHapticDeviceHandler
класс, чтобы проверить это.
Если вы действительно можете создать только один такой объект, вы можете решить свою проблему, предоставив одноэлементную фабрику для этого объекта.