在对象数组中,构造函数被调用多次,但运算符new[]只被调用一次,原因是什么
In the array of objects, constructor is called many times but operatror new[] only once , why?
当在堆中创建对象时,它(new)会做两件事。
1:呼叫运营商新
2:调用构造函数来初始化obejct。
我正在尝试创建对象数组,例如4个对象,所以它调用构造函数和析构函数4次,这是有意义的,但它只调用一个时间运算符new[]??为什么?以下是我尝试运行的代码。
#include <iostream>
using namespace std;
class test
{
public:
static void *operator new[] (size_t size)
{
cout<<"operaotor new called"<<endl;
return ::operator new[](size);
}
test()
{
cout<<"constructor called"<<endl;
}
~test()
{
cout<<"destructor called"<<endl;
}
};
int main()
{
test *k = new test[4];
delete []k;
}
operator new[]
只是用来分配必要的空间,没有其他东西。当然,它只会这样做一次,因为其他任何东西都是不相关的,不会得到连续的缓冲区。在new test[4]
的情况下,您得到的size
参数应该是4 * sizeof(test)
。
构造函数和析构函数对数组中的每个项调用一次,而new[]只调用一次因为您只创建了一个数组。
相关文章:
- 是什么让放置新调用对象的构造函数?
- 使用基类指针调用基类的值构造函数的语法是什么?
- C++:使用方法调用析构函数的顺序是什么?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- "noexcept-expression 由于对......的调用而计算为'假'"是什么意思?
- 正确的方法是什么?调用指针到指针到指针内部的函数?
- 调用boost.asio的异步函数时,线程是什么时候创建的
- C++:允许临时对象调用非常量成员函数的设计理念是什么?
- 是什么能让dynamic_cast开始抛出 std:bad_cast 即使被调用在指针上?
- 在 MySQL 连接器C++ API 中使用一个函数调用执行多个查询的正确方法是什么?
- 以下声明C++中调用的函数的方法是什么?
- 使用 std::async 调用模板函数的正确方法是什么?
- 在C++中将结构从被调用函数返回到调用函数的适当方法是什么
- 调用不属于基类的派生类函数的最佳方法是什么?
- {}在函数调用中的参数之前是什么意思?key_equal {}(key1,key2);
- 调用模板化类内的枚举类枚举器的正确语法是什么
- DLL 的"good"调用约定是什么?
- 当我们在MSDN中调用UpdateWindows()时,该方法是什么
- 从malloc()进行的Windows和Linux本机OS/系统调用是什么