是否有一些关于内存分配的协议?


class http_client {
public:
void init(const char url*);
void download();
}
int main() {
http_client c1;
{
char url[] = "www.example.com"; // url allocated on stack
c1.init(url);
}   // <<<<< url is destroyed
c1.connect();
// do something else
}

在上面的例子中有两种可能:

  1. http_client.init()为url分配内存,复制它并存储在某个地方以供将来使用
  2. http_client.init()只存储指向url的指针

在变量№2 c1.connect()将失败,因为url在concont()之前被销毁;

一般来说,这两种变体都是可能的。有时需要避免对字符串、数组或其他容器进行额外的复制,特别是当存在一堆抽象层时,每个抽象层存储一个字符串的副本。

区分这两种变体的唯一方法是查看文档或查看init()方法内部,看看它是存储字符串内容还是只是一个指针。

对于深度复制参数的方法和只复制一个pinter/reference的方法,是否有一些建议、协议或命名约定?

有什么建议吗

是的。将数据存储在类中是推荐的默认选择。这是因为它更安全,更少依赖于文档。

但是,通常更倾向于使用构造函数而不是普通的成员函数进行初始化。

或方法命名约定

类型有松散的命名约定。命名为"view"或";ptr"或";ref"经常引用存储在别处的对象。由于没有引用语义的类型是默认选择,因此它们不需要命名提示。

此外,接受指针形参的构造函数通常被认为可能保留引用以供以后使用,而当形参是引用时,这种考虑并不典型。当name像"ref"不过等。考虑std::reference_wrapper作为这样的例外。

最新更新