编写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
生成一个很好的空指针,无论该指针指向何处。它与
新建
删除
没有任何关系。Not
new
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
生成一个很好的空指针,无论该指针指向何处。它与
新建
删除
没有任何关系。Not
new
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++是一种工具,它发生了