Tag: placement new

C ++,是否有可能直接调用一个构造函数,没有新的?

我可以显式调用构造函数,而不使用new ,如果我已经有一个对象的内存? class Object1{ char *str; public: Object1(char*str1){ str=strdup(str1); puts("ctor"); puts(str); } ~Object1(){ puts("dtor"); puts(str); free(str); } }; Object1 ooo[2] = { Object1("I'm the first object"), Object1("I'm the 2nd") }; do_smth_useful(ooo); ooo[0].~Object1(); // call destructor ooo[0].Object1("I'm the 3rd object in place of first"); // ???? – reuse memory

为什么这段代码试图调用复制构造函数?

我只是在Visual Studio中花费了大量的时间来处理错误。 我已经将代码提炼成了下面这个小的可编译的例子,并在IdeOne上试了一下,得到了同样的错误,你可以在这里看到。 我想知道为什么下面的代码尝试调用B(const B&)而不是B(B&&) : #include <iostream> using namespace std; class A { public: A() : data(53) { } A(A&& dying) : data(dying.data) { dying.data = 0; } int data; private: // not implemented, this is a noncopyable class A(const A&); A& operator=(const A&); }; class B : public A { }; int main() […]