我正在尝试重载全局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无法正常运行,我的操作员不会被调用
任何线索?
提前谢谢!
答案 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