编写c++;没有新建和删除关键字?最佳方法? 我尝试编写C++代码而不使用关键字新< /COD>和删除< /C> > /P>
首先,这是否一个好的做法 这样编码的一个副作用是,我不能依赖编写c++;没有新建和删除关键字?最佳方法? 我尝试编写C++代码而不使用关键字新< /COD>和删除< /C> > /P>,c++,containers,C++,Containers,首先,这是否一个好的做法 这样编码的一个副作用是,我不能依赖nullptr获取空值 例如: std::数组块 变成 std::数组块 描述空块的最佳方式是什么 我想用这个: class Block { private: protected: public: ... static const Block EMPTY; }; } const Block EMPTY(0, BlockType::TUTORIAL, 0, 0); 你们觉得怎么样?这是一个好方法吗 像这样编码的
nullptr
获取空值
例如:
std::数组块代码>
变成
std::数组块代码>
描述空块的最佳方式是什么
我想用这个:
class Block {
private:
protected:
public:
...
static const Block EMPTY;
};
}
const Block EMPTY(0, BlockType::TUTORIAL, 0, 0);
你们觉得怎么样?这是一个好方法吗
像这样编码的一个副作用是我不能依赖它
空值的空ptr
你到底在说什么nullptr
生成一个很好的空指针,无论该指针指向何处。它与新建
和删除
没有任何关系。Notnew
ing任何东西都不会阻止您使用指针,不管指针是否为空
首先,这是否一个好的做法
new
和delete
都是非常不安全的,因此将它们从您的代码库中驱赶出来,就像它们是病毒的传染瘟疫一样是很好的。绝对正确的是,您永远不应该使用delete
new
稍微复杂一些,因为有些非常薄的包装有更多的理由,比如
template<typename T, typename... Args> std::unique_ptr<T> make_unique(Args&&... args) {
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
template std::unique\u ptr make_unique(Args&&…Args){
返回std::unique_ptr(新的T(std::forward(args)…);
}
但是,在专门为智能指针分配的包装器之外,绝对不应该使用非放置new
,也不应该使用delete
或delete[]
。使用诸如智能指针和容器之类的RAII类,它们可以安全地保证程序的正确性
像这样编码的一个副作用是我不能依赖它
空值的空ptr
你到底在说什么nullptr
生成一个很好的空指针,无论该指针指向何处。它与新建
和删除
没有任何关系。Notnew
ing任何东西都不会阻止您使用指针,不管指针是否为空
首先,这是否一个好的做法
new
和delete
都是非常不安全的,因此将它们从您的代码库中驱赶出来,就像它们是病毒的传染瘟疫一样是很好的。绝对正确的是,您永远不应该使用delete
new
稍微复杂一些,因为有些非常薄的包装有更多的理由,比如
template<typename T, typename... Args> std::unique_ptr<T> make_unique(Args&&... args) {
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
template std::unique\u ptr make_unique(Args&&…Args){
返回std::unique_ptr(新的T(std::forward(args)…);
}
但是,在专门为智能指针分配的包装器之外,绝对不应该使用非放置new
,也不应该使用delete
或delete[]
。使用诸如智能指针和容器之类的RAII类,它们可以安全地保证程序的正确性。如果您想编写安全的代码并简化内存管理,您确实应该避免删除。但是没有必要丢弃新的。最好的方法是使用new
分配您想要的任何对象,并将其存储在智能指针中,如std::shared\u ptr
或std::unique\u ptr
。您始终可以将这些指针与nullptr
进行比较。所有对象将自动删除
在这种情况下,有些人建议将原始的new
替换为make_shared
和make_unique
调用
相关的问题是何时使用T&
以及何时使用T*
将参数传递给函数。经验法则是:使用T*
每当输入参数可能不存在时,使用T&
确保提供输入参数。如果您想编写安全的代码并简化内存管理,您确实应该避免删除
。但是没有必要丢弃新的。最好的方法是使用new
分配您想要的任何对象,并将其存储在智能指针中,如std::shared\u ptr
或std::unique\u ptr
。您始终可以将这些指针与nullptr
进行比较。所有对象将自动删除
在这种情况下,有些人建议将原始的new
替换为make_shared
和make_unique
调用
相关的问题是何时使用T&
以及何时使用T*
将参数传递给函数。经验法则是:使用T*
每当输入参数可能不存在时,使用T&
确保提供输入参数。C++是一种为实现最高性能而设计的语言,同时提供非常高级的功能(完整的OO、多重继承、通用编程)。“最大性能”的一部分是精确使用显式内存管理(是的,有语言,甚至C++的包,像这样,减轻了您分配内存的跟踪负担;成本是巨大的,有时令人望而却步)。C++是一种工具,它的边缘非常锐利。不要让儿童接触。使用时要格外小心
该语言的功能包括在适当的时间和地点使用。C++是一种为实现最高性能而设计的语言,同时提供非常高级的功能(完整的OO、多重继承、通用编程)。“最大性能”的一部分是精确使用显式内存管理(是的,有语言,甚至C++的包,像这样,减轻了您分配内存的跟踪负担;成本是巨大的,有时令人望而却步)。C++是一种工具,它发生了