【发布时间】:2017-09-13 09:03:49
【问题描述】:
我找到了这段代码,但我不明白为什么它在项目中有效。代码结构为:
class MyClass {
int value;
};
struct MyStruct {
MyClass classA;
MyClass classB;
};
int main() {
MyStruct myStruct;
new (&((&myStruct)->classA)) MyClass();
new (&((&myStruct)->classB)) MyClass();
}
(我添加了内部&符号以创建一个较小的示例。在源代码中 myStruct 是一个指针)。
编译器说
In function int main()
error: no matching function for call to ‘operator new(sizetype, MyClass*)’
new (&((&myStruct)->classA)) MyClass();
^
note: candidates are:
note: void* operator new(long unsigned int)
note: candidate expects 1 argument, 2 provided
也许我错过了一些重要的事情。这是一个大项目,我不能复制它。我无法创建 MWE。我希望有人能向我解释这段代码背后的主要思想,以及我必须改变什么来编译它。
【问题讨论】:
-
这个
(&myStruct)->毫无意义。或者至少我希望它不会。 -
写这段代码的人都知道 C++ 是危险的,但不足以有效地处理它。
-
我很好奇有人会如何知道新位置,这是一个很少使用的功能;但不知道对象是如何创建的。
-
如果我添加
#include <new>似乎可以编译。
标签: c++ new-operator