C++ STL construct.h

本文深入探讨了C++ STL中construct.h头文件的使用,讲解了其在C++11中的相关特性,包括如何利用构造函数初始化容器元素,以及提升效率的方法。
摘要由CSDN通过智能技术生成

全部代码

#pragma once

#include <new>

#include "type_traits.h"
#include "iterator.h"

namespace tinySTL {

	// construct

	template<typename T>
	void construct(T* p) {
		::new((void*)p) T();
	}

	template<typename T1, typename T2>
	void construct(T1* p, const T2& val) {
		::new((void*)p) T1(val);
	}

	template<typename T, typename... Args>
	void construct(T* p, Args&&... args) {
		::new((void*)p) T(tinySTL::forward<Args>(args)...);
	}

	// destroy

	template<typename T>
	void destroy_one(T*, std::true_type) {}

	template<typename T>
	void destroy_one(T* pointer, std::false_type) {
		if (pointer)
			pointer->~T(); // 执行自定义的析构函数,否则不处理
	}

	template<typename ForwardIter>
	void destroy_cat(ForwardIter, ForwardIter, std::true_type) {}

	template<typename ForwardIter>
	void destroy_cat(ForwardIter first, ForwardIter last, std::false_type) {
		for (; first != 
#3 0x000000000046ef07 in ~_Vector_base (this=0x6a4ead0, __in_chrg=<value optimized out>) at /usr/include/c++/4.4/bits/stl_vector.h:132 #4 0x000000000046dd2d in ~vector (this=0x6a4ead0, __in_chrg=<value optimized out>) at /usr/include/c++/4.4/bits/stl_vector.h:313 #5 0x000000000046b7c8 in ~ZXJC_LineCover (this=0x6a4ea30, __in_chrg=<value optimized out>) at ../../web/demonitordll/dbproc.h:236 #6 0x000000000046b7e2 in std::_Destroy<ZXJC_LineCover> (__pointer=0x6a4ea30) at /usr/include/c++/4.4/bits/stl_construct.h:83 #7 0x000000000046795a in std::_Destroy_aux<false>::__destroy<ZXJC_LineCover*> (__first=0x6a4ea30, __last=0x6a4ea18) at /usr/include/c++/4.4/bits/stl_construct.h:93 #8 0x000000000045bc7f in std::_Destroy<ZXJC_LineCover*> (__first=0x6a4e960, __last=0x6a4ea18) at /usr/include/c++/4.4/bits/stl_construct.h:116 #9 0x000000000044920f in std::_Destroy<ZXJC_LineCover*, ZXJC_LineCover> (__first=0x6a4e960, __last=0x6a4ea18) at /usr/include/c++/4.4/bits/stl_construct.h:142 #10 0x00007f3769464bde in std::vector<ZXJC_LineCover, std::allocator<ZXJC_LineCover> >::_M_insert_aux (this=0x7f374ee9aca0, __position=..., __x=...) at /usr/include/c++/4.4/bits/vector.tcc:359 #11 0x00007f376945c985 in std::vector<ZXJC_LineCover, std::allocator<ZXJC_LineCover> >::push_back (this=0x7f374ee9aca0, __x=...) at /usr/include/c++/4.4/bits/stl_vector.h:741 #12 0x00007f3769445ca0 in CDBProc::GetLineCoverageRate (this=0x7f3758003690, o_fStatistRate=@0x7f374ee9acdc, o_strErr=..., feederVec=...) at dbproc.cpp:3472
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值