C++中new对象时加不加括号的区别

测试代码: 

// Test1.hpp
#pragma once
#include <iostream>			// std::cin std::cout std::cerr
#include <memory>			// std::shared_ptr
#include <string>			// std::string

namespace MyTest
{
	class TestClass1
	{
	public:
		void PrintDefaultIntMember() const
		{
			std::cout << "var int = " << m_num << std::endl;
		}

		void PrintDefaultBoolMember() const
		{
			std::cout << "var bool = " << m_b << std::endl;
		}

		void PrintDefaultDoubleMember() const
		{
			std::cout << "var double = " << m_d << std::endl;
		}

		void PrintDefaultStringMember() const
		{
			std::cout << "var std::string = " << m_str << std::endl;
		}

		void PrintDefaultPtrMember() const
		{
			std::cout << "ptr init to nullptr? " << (m_buf == nullptr ? "true" : "false") << std::endl;
		}

	private:
		int m_num;
		double m_d;
		bool m_b;
		std::string m_str; // 带默认构造函数的类对象
		char* m_buf;
	};

	/// 测试C++中各种类成员变量的默认值
	void MyTest1() 
	{
		std::cout << "new TestClass1:" << std::endl;
		std::shared_ptr<TestClass1> t1(new TestClass1);
		t1->PrintDefaultIntMember();
		t1->PrintDefaultDoubleMember();
		t1->PrintDefaultBoolMember();
		t1->PrintDefaultPtrMember();
		t1->PrintDefaultStringMember();

		std::cout << "================================" << std::endl;

		std::cout << "new TestClass1():" << std::endl;
		std::shared_ptr<TestClass1> t2(new TestClass1());
		t2->PrintDefaultIntMember();
		t2->PrintDefaultDoubleMember();
		t2->PrintDefaultBoolMember();
		t2->PrintDefaultPtrMember();
		t2->PrintDefaultStringMember();

		std::cout << "================================" << std::endl;
		std::cout << "new int array without ():" << std::endl;
		int* arr1 = new int[10];
		for (int i = 0; i < 10; ++i) {
			std::cout << arr1[i] << " ";
			if (i == 9) {
				std::cout << std::endl;
			}
		}

		std::cout << "================================" << std::endl;
		std::cout << "new int array with ():" << std::endl;
		int* arr2 = new int[10]();
		for (int i = 0; i < 10; ++i) {
			std::cout << arr2[i] << " ";
			if (i == 9) {
				std::cout << std::endl;
			}
		}

		delete[] arr1; arr1 = nullptr;
		delete[] arr2; arr2 = nullptr;
	}
}
// main.cpp
#include "Test1.hpp"

int main()
{
	MyTest::MyTest1();

    return 0;
}

MSVC2015、GCC 7.3.0 测试结果:

new TestClass1:
var int = -842150451
var double = -6.27744e+66
var bool = 205
ptr init to nullptr? false
var std::string =
================================
new TestClass1():
var int = 0
var double = 0
var bool = 0
ptr init to nullptr? true
var std::string =
================================
new int array without ():
-842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451
================================
new int array with ():
0 0 0 0 0 0 0 0 0 0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值