bookshelf_id
运算符用于在堆内存中创建新对象。我不知道如何在不使用new运算符的情况下在堆内存中创建对象。有可能,怎么样?
还有人可以建议我使用C ++中的new
opeartor在堆栈中创建对象吗?
答案 0 :(得分:2)
在我使用C ++的有限经验中,使用new运算符是在堆中创建公共对象的唯一方法。 HeapAlloc可以在堆中分配内存,但是如何在不使用new运算符的情况下在堆中创建类?
答案 1 :(得分:2)
在现代C++
中,通常使用返回智能指针的函数std::make_unique和std::make_shared来避免直接使用new
。
例如
class Object
{
public:
Object(int i): i(i) {}
// ...
void do_stuff() { /*...*/ }
private:
int i;
};
auto object = std::make_unique<Object>(4);
object->do_stuff();
现在您不必担心删除object
。
答案 2 :(得分:2)
要回答您的一个问题,您可以使用placement new在堆栈上分配对象。例如:
int main()
{
using namespace std;
char buf[sizeof(string)]; // allocate char array on stack
string *str = new (buf) string{ "I'm a placement new string object" };
cout << *str << endl;
str->~string(); // delete string object
// character array object will be
// automatically deallocated
return 0;
}