Я столкнулся с ошибкой Illegal Access, но я не уверен, что происходит в моем коде...
У меня такой класс:
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 создается без проблем, но второй просто сбой с ошибкой Illegal Access при выполнении конструктора.
Если я не ошибаюсь, когда вы создаете новые объекты из класса, их атрибуты различаются, поэтому каждый объект имеет свои собственные атрибуты. Имея это в виду, я настаиваю на том, что эти указатели cHapticDeviceHandler отличаются друг от друга в двух объектах, поэтому я не могу понять, зачем делать что-то в первую очередь, и делать это снова просто не получится.
Я почти уверен, что я делаю что-то действительно не так и смущаю buuuut... Я не могу найти, где проблема: $
Может ли кто-нибудь дать мне подсказку, пожалуйста? Я вынужден использовать Visual Studio 2008, и я использую CHAI3D, на всякий случай это важно.
Без дополнительной информации я могу только догадываться. Проблема заключается в том, что вы пытаетесь создать несколько экземпляров cHapticDeviceHandler
. Возможно, он не поддерживает создание нескольких экземпляров, например, потому что он использует некоторые static
данные или использует эксклюзивные ресурсы (см. Драйвер устройства)?
Чтобы проверить это, cHapticDeviceHandler
к документации или коду класса cHapticDeviceHandler
.
Если вы действительно можете создать только один такой объект, вы можете решить свою проблему, предоставив единую фабрику для объекта.
Я предполагаю, что вы не можете создать более одного экземпляра cHapticDeviceHandler. Поэтому, когда вы создаете первый объект MyClass, вы в порядке, но когда вы создаете второй объект MyClass, он попытается создать экземпляр другого cHapticDeviceHandler, и это не будет разрешено. Может быть, у вас есть только одно устройство, и, следовательно, у него не может быть двух обработчиков?
MyClass* obj1 = new MyClass(); delete obj1; MyClass* obj2 = new MyClass()
также завершится ошибкой. Это не должно быть сбой после удаления obj1, если это так, не так ли?