gpt4 book ai didi

C++:重载新调用自动构造对象

转载 作者:搜寻专家 更新时间:2023-10-31 02:20:41 25 4
gpt4 key购买 nike

我正在尝试重载 new 运算符以分配我自己的内存,但我仍然需要构造对象。这就是为什么我决定通过可变参数模板传递参数,以便正确地提供对象的构造函数。

在这个例子中构造函数被调用了两次,我无法解释为什么。似乎重载的 new 自动调用了构造函数。

#include <stdlib.h>
#include <iostream>
#include <new>

class A
{
public:
template<typename... Args>
void *operator new(size_t sz, Args ...parameters)
{
void *mem = ::operator new(sizeof(A));
A *var = ::new (mem) A(parameters...);
return var;
}
A() : num(0) { std::cout << "Default" << std::endl; }
A(int nb) : num(nb) { std::cout << "Integer = " << num << std::endl; }
const int num;
};

int main()
{
A *obj = new A(3);
std::cout << "Obj result = " << obj->num << std::endl;
}

最佳答案

已修复,没有理由尝试在重载中调用构造函数,对象将在返回的 void* 指向的分配内存中构造。

关于C++:重载新调用自动构造对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32402842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com