使用全局new和删除动态库

时间:2014-03-05 16:22:03

标签: c++ memory-management dynamic operator-overloading new-operator

我正在尝试重载全局new和delete。所以我创建了一个单独的lib来保持两者,但是当我尝试使用它们时,我发现我的mehotd没有被调用。有人可以告诉我为什么以及如何解决,拜托? 这是我的代码:

file my_operator.cpp
#include <cstdlib>
#include <cstdio>

void* operator new(size_t size)
{
    puts("constructing");
    void* p = malloc(size);
    return p;

}

void operator delete(void *p) throw()
{
    puts("deleting");
    free(p);
}

file myclass.h
class clase
{
private:
    int x;
public:
    clase(int i):x(i){}
    inline int getX(){return x;}
};

main.cpp
#include "myclass.h"

int main()
{
    int k = 5;
    int ret = 0;
    clase* c = new clase(k);
    delete c;
    return ret;
}

到目前为止我尝试了什么:
运行这个:

  

g ++ -c my_operator.cpp -o my_operator.o&amp;&amp; g ++ main.cpp my_operator.o -o main

然后启动./main - &gt;它有效,我的操作员被称为

然而
运行这个:

  

g ++ -c my_operator.cpp -o my_operator.o   ld -o my_operator.so my_operator.o -shared创建.lib文件   然后
  g ++主要

最后运行./a.out无法正常运行,我的操作员不会被调用 任何线索?
提前谢谢!

2 个答案:

答案 0 :(得分:0)

你的main.cpp不知道你超载了运营商。 将过载运算符放在头文件中。

有关这个问题的有用链接: http://en.cppreference.com/w/cpp/memory/new/operator_new http://www.cprogramming.com/tutorial/operator_new.html

答案 1 :(得分:0)

您的命令不会将您的主要内容与my_operator.so相关联。您需要以下内容:

g++ -Wall -Wextra -c -fPIC -o my_operator.o my_operator.cpp
g++ -shared -o libmy_operator.so my_operator.o
g++ -Wall -Wextra -c -o main.o main.cpp
g++ -o main main.o -lmy_operator
./main