
how to initialize a global instance
I wrote a C++ program to verify how the global object to be constructed.
in myclass.h:
class MyClass
{
public:
int result;
int ia, ib;
MyClass();
~MyClass();
int getResult();
in myclass.cc (implemented by C++)
#include "myclass.h"
void *operator new (size_t size)
{
printk("calling new...\n");
return kmalloc(size, GFP_KERNEL);
void operator delete (void *ptr)
{
printk("calling delete...\n");
kfree(ptr);
MyClass::MyClass()
{
printk(KERN_INFO "MyClass constructor.\n");
result = 0;
ia = 5;
ib = 14;
MyClass::~MyClass()
{
printk(KERN_INFO "MyClass destructor.\n");
int MyClass::getResult()
{
result = ia * ib;
printk("result = %d\n", result);
return result;
in main.c (implemented by C)
#include "lib1.h"
MyClass myClass; // won't work (???)
//MyClass *myClass; // work
extern "C" int init_module(void)
{
///////myClass = new MyClass();
printk("init_module called.\n");
printk("before getResult().\n");
myClass.getResult();
printk("after getResult().\n");
return 0;
extern "C" void cleanup_module(void)
{
printk("cleanup_module called.\n");
//////delete myClass;
And, I use the following to compile/link.
g++ -fno-exceptions -D__KERNEL__ -DMODULE -c myclass.cc
ar cru myclass.a myclass.o
ranlib myclass.a
g++ -fno-exceptions -D__KERNEL__ -DMODULE -c main.c
ld -Ur main.o myclass.a -o mytest.o
The problem is when I try to initalize a global object, say MyClass
myClass, it won't call the constructor after loaded the mytest module.
But, if I use global instance pointer, say MyClass *myClass, it works.
How can I get a global instance sucessfully?
Thanks very much!
Sent via Deja.com http://www.**-**.com/
Before you buy.