我最近在与一些人谈论我正在编写的程序时听到了"钩子"一词.虽然我从对话中推断钩子是一种函数,但我不确定这个术语的含义.我搜索了一个定义,但无法找到一个好的答案.有人能够让我知道这个术语通常意味着什么,也许是一个小例子来说明这个定义?
为什么C中的以下代码有效?
const char* str = NULL;
str = "test";
str = "test2";
Run Code Online (Sandbox Code Playgroud)
由于str是指向常量字符的指针,为什么我们允许为它分配不同的字符串文字?此外,我们如何保护str不被修改?看起来这可能是一个问题,例如,我们后来将str分配给一个更长的字符串,最后写入另一部分内存.
我应该补充一点,在我的测试中,我在每个作业之前和之后打印出str的内存地址,但它从未改变过.因此,尽管str是指向const char的指针,但内存实际上正在被修改.我想知道这可能是C的遗留问题吗?
Linux中是否有可用的工具以图形或文本方式显示程序的内存使用情况?例如,如果我编写一个C++程序并想要验证对象是否正在内存中正确分配和解除分配,那么是否有可用的应用程序可以直观地显示正在实例化和删除的对象?当我以前在Visual Studio中编程时,我记得单步执行程序并使用调试窗格来监视内存使用情况,并且正在寻找类似于Linux中的内容.
我试图将指向一个类中定义的函数的指针传递给另一个类.经过大量研究,我相信我的语法是正确的,但我仍然遇到编译器错误.以下是一些演示我的问题的代码:
class Base
{
public:
BaseClass();
virtual ~BaseClass();
};
class Derived : public Base
{
public:
// assign strFunction to the function pointer passed in
Derived(string (*funPtr)(int)) : strFunction(funPtr);
~Derived();
private:
// pointer to the function that is passed in
string (*strFunction)(int value);
};
class MainClass
{
public:
MainClass()
{
// allocate a new Derived class and pass it a pointer to myFunction
Base* myClass = new Derived(&MainClass::myFunction);
}
string myFunction(int value)
{
// return a string
}
};
Run Code Online (Sandbox Code Playgroud)
当我尝试编译此代码时,我得到的错误是 …