Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当CRT动态链接时,重载全局运算符new(和variants)如何工作 void*运算符新建(大小){…} int main() { char*b=new char[256];//(1)调用我们的新 std::向量v; v、 调整大小(128);/(2)也调用我们的新。。 返回0; } (1) 在编译这段代码时,编译器使用重载的new。嗯 (2) 编译此代码时,编译器将resize()的实现留给CRT,以便在运行时链接到CRT中_C++ - Fatal编程技术网

C++ 当CRT动态链接时,重载全局运算符new(和variants)如何工作 void*运算符新建(大小){…} int main() { char*b=new char[256];//(1)调用我们的新 std::向量v; v、 调整大小(128);/(2)也调用我们的新。。 返回0; } (1) 在编译这段代码时,编译器使用重载的new。嗯 (2) 编译此代码时,编译器将resize()的实现留给CRT,以便在运行时链接到CRT中

C++ 当CRT动态链接时,重载全局运算符new(和variants)如何工作 void*运算符新建(大小){…} int main() { char*b=new char[256];//(1)调用我们的新 std::向量v; v、 调整大小(128);/(2)也调用我们的新。。 返回0; } (1) 在编译这段代码时,编译器使用重载的new。嗯 (2) 编译此代码时,编译器将resize()的实现留给CRT,以便在运行时链接到CRT中,c++,C++,运行时链接到的resize()的CRTs实现如何链接回该模块的operator new实现 编辑:明确地说,我不是问如何做到这一点——我是在陈述观察到的行为,而是问它是如何工作的。这将是一项艰巨的工作,根本不可行。您必须手动修补DLL 我不敢告诉你,这是不可能的,至少是不安全的。这将是一项艰巨的工作,根本不可行。您必须手动修补DLL 我恐怕要告诉你,这是不可能的,至少不安全。取决于平台。很多ABI都有“弱符号”的规定,在链接/加载期间将被覆盖。您会发现resize方法依次调用运算符new。@Br

运行时链接到的resize()的CRTs实现如何链接回该模块的operator new实现


编辑:明确地说,我不是问如何做到这一点——我是在陈述观察到的行为,而是问它是如何工作的。这将是一项艰巨的工作,根本不可行。您必须手动修补DLL


我不敢告诉你,这是不可能的,至少是不安全的。

这将是一项艰巨的工作,根本不可行。您必须手动修补DLL


我恐怕要告诉你,这是不可能的,至少不安全。

取决于平台。很多ABI都有“弱符号”的规定,在链接/加载期间将被覆盖。您会发现
resize
方法依次调用运算符new。@BrettHale感谢您的回答。如果我在中静态编译CRT,我可以理解弱符号工作,但它都是动态链接的。取决于平台。很多ABI都有“弱符号”的规定,在链接/加载期间将被覆盖。您会发现
resize
方法依次调用运算符new。@BrettHale感谢您的回答。如果我静态编译CRT,我可以理解弱符号的工作原理,但它都是动态链接的。对,出于某种原因,我想他是在问如何手动强制任何第三方库。我的错。公平地说,那次编辑是在我已经在这里发表评论之后进行的。@FelixLehmann是的,我根据你的评论添加了编辑,以确保没有进一步的混淆:)是的,出于某种原因,我认为他在问如何手动强制任何第三方库进行编辑。我的错。公平地说,那次编辑是在我已经在这里发表评论之后进行的。@FelixLehmann是的,我根据你的评论添加了编辑,以确保没有进一步的混淆:)
void *operator new(size_t s) { ... }

int main()
{
    char *b = new char[256];     // (1) Calls our new
    std::vector<int> v;
    v.resize(128);               // (2) Also calls our new..
    return 0;
}