在我的工作场所,通常在声明中指定默认参数.什么是正常的自定义?我应该在方法声明或方法定义中指定默认参数吗?
编辑:有没有办法为引用指定默认参数?
编辑:有人可以提供参考参数的默认参数的示例吗?
我们写了一个非常简单的C++程序来隔离bug.应用程序将一个数字作为参数并创建该数量的线程并将所有这些线程发送到事件循环中.如果我们运行带有> 3个线程的应用程序(包括主线程),则顶部显示它在虚拟内存中占用100 + MB.但是,如果我们使用<= 3个线程运行它,它将以大约36MB的虚拟内存运行.我们strace在应用程序中发现,在第一个场景中,有一个mmap大约65MB的匿名映射,没有取消映射.问题是随着线程数量的增加,内存使用率会上升.而且我们有大量具有大量线程的二进制文件,因此似乎有很多浪费的空间.为什么会这样?SLES11 64位.
我有3个小文件,用于制作静态库和应用程序:
test.h
#ifndef TEST_H
#define TEST_H
class Test
{
public:
Test();
};
extern Test* gpTest;
#endif
Run Code Online (Sandbox Code Playgroud)
TEST.CPP
#include "test.h"
Test::Test()
{
gpTest = this;
}
Test test;
Run Code Online (Sandbox Code Playgroud)
main.cpp中
#include "test.h"
#include <iostream>
using namespace std;
Test* gpTest = NULL;
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
建立
g++ -c test.cpp -o test.o
ar cr test.a test.o
g++ -c main.cpp -o main.o
g++ main.o -o app -Wl,--whole-archive -L/home/dumindara/intest/test.a -Wl,-no--whole-archive
Run Code Online (Sandbox Code Playgroud)
错误(链接步骤)
/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我尝试了一切:使用-static-libgcc并链接到静态libstdc ++.无法让这个工作.这完全归功于--whole-archive标志.但我离不开它.
正如主题所说 - 如果我们放弃指针的使用并仅使用C++中的引用,那么最大的问题是什么?假设我们有一个new返回一个引用,一个返回一个引用delete.
我想从函数返回一个类的实现.该功能在库中.我想阻止用户销毁我返回的对象.我怎样才能做到这一点?
编辑:示例.
与世界的接口:
class Base
{
public:
virtual void foo() = 0;
};
Base* GetFoo();
Run Code Online (Sandbox Code Playgroud)
实施 - 内部:
class Bar : public Base
{
public:
void foo() { //Do something}
};
Base* GetFoo()
{
return new Bar
}
Run Code Online (Sandbox Code Playgroud) 我偶尔会使用memoize功能.通常采用以下形式:
(defn- sqrt-denom [iterations]
(/ 1 (if (= iterations 0)
2
(+ 2 (sqrt-denom (dec iterations))))))
(def sqrt-denom (memoize sqrt-denom))
Run Code Online (Sandbox Code Playgroud)
我假设在记忆时重用函数名是"合适的".这是一个好习惯吗?或者我应该为非记忆和记忆功能使用不同的名称?