在最近的代码审查中,贡献者试图强制执行NULL对指针的所有检查以下列方式执行:
int * some_ptr;
// ...
if (some_ptr == NULL)
{
    // Handle null-pointer error
}
else
{
    // Proceed
}
Run Code Online (Sandbox Code Playgroud)
代替
int * some_ptr;
// ...
if (some_ptr)
{
    // Proceed
}
else
{
    // Handle null-pointer error
}
Run Code Online (Sandbox Code Playgroud)
我同意他的方式更明确,因为它明确地说"确保这个指针不是NULL",但我会反驳说,任何正在研究这个代码的人都会明白在一个指针变量中使用指针变量if声明是隐式检查NULL.另外我觉得第二种方法引入类似错误的可能性较小:
if (some_ptr = NULL)
Run Code Online (Sandbox Code Playgroud)
这对于查找和调试来说只是一种绝对的痛苦.
您更喜欢哪种方式?为什么?
不使用实例/引用计数器的Singleton对象是否应被视为C++中的内存泄漏?
如果没有计数器在计数为零时要求显式删除单例实例,该对象如何被删除?当应用程序终止时,操作系统是否清理它?如果那个Singleton在堆上分配了内存怎么办?
简而言之,我是否必须调用Singelton的析构函数,还是可以依赖它在应用程序终止时进行清理?
我即将开始一个网络项目,并且在过去的5年中几乎完全使用LAMP堆栈.我想构建更大,更可扩展的东西,因此一直在研究Java EE.JSP和EJB之间的逻辑划分似乎是我想要做的事情的理想选择.
任何人都可以推荐资源来熟悉Java EE吗?也许如果有人知道我可以考虑的比PHP更具可扩展性的技术,我会全力以赴.
非常感谢!
我有一个简单的用户模型,带有一个单一的嵌套Profile资源,因此在我的routes.rb中我有:
resources :users do
  resource :profile, :only => [:edit, :update, :show]
end
Run Code Online (Sandbox Code Playgroud)
这会生成预期的路线:
edit_user_profile GET    /users/:user_id/profile/edit(.:format)  {:action=>"edit", :controller=>"profiles"}
     user_profile GET    /users/:user_id/profile(.:format)       {:action=>"show", :controller=>"profiles"}
     user_profile PUT    /users/:user_id/profile(.:format)       {:action=>"update", :controller=>"profiles"}
Run Code Online (Sandbox Code Playgroud)
我创建了一个简单的控制器更新方法来更新模型,然后在成功更新时重定向:
def update
  @profile = Profile.find_by_user_id(params[:user_id])
  @user = User.find_by_id(params[:user_id])
  respond_to do |format|
    if @profile.update_attributes(params[:profile])
      format.html { redirect_to( user_profile_path(@user, @profile), :notice => 'Profile was successfully updated.') }
    else
      # ...
    end
  end
end
Run Code Online (Sandbox Code Playgroud)
问题是,一旦提交表单,表单就会重定向到mydomain.com/users/4/profile.22,其中22恰好是配置文件的ID.显然,这会使控制器混淆,因为路由将'22'解释为格式.
我的问题是,如何将其重定向到mydomain.com/users/4/profile呢? 我已经在redirect_to语句中尝试了以下变体而没有效果,它们都会导致相同的错误网址:
redirect_to( user_profile_path(@user), ... )
redirect_to( user_profile_path(@user, @profile), ... )
redirect_to([@user, @profile], ... )
redirect_to( @profile, ... …Run Code Online (Sandbox Code Playgroud) 我正在使用winsock和C++来设置服务器应用程序.我遇到的问题是调用listen导致第一次机会异常.我猜通常这些可以被忽略(?)但是我发现其他人有同样的问题我在哪里导致应用程序偶尔挂起一次.任何帮助将不胜感激.
第一次机会例外是:
MyApp .exe 中0x*12345678*的第一次机会异常:0x000006D9:端点映射器不再提供端点.
我发现一些证据表明这可能是由socket引起的.我正在使用的代码如下所示.listen从底部调用第五行时发生异常.
  m_accept_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if (m_accept_fd == INVALID_SOCKET)
  {
    return false;
  }
  int optval = 1;
  if (setsockopt (m_accept_fd, SOL_SOCKET, SO_REUSEADDR,
                  (char*)&optval, sizeof(optval)))
  {
    closesocket(m_accept_fd);
    m_accept_fd = INVALID_SOCKET;
    return false;
  }
  struct sockaddr_in  local_addr;
  local_addr.sin_family = AF_INET;
  local_addr.sin_addr.s_addr = INADDR_ANY;
  local_addr.sin_port = htons(m_port);
  if (bind(m_accept_fd, (struct sockaddr *)&local_addr,
           sizeof(struct sockaddr_in)) == SOCKET_ERROR)
  {
    closesocket(m_accept_fd);
    return false;
  }
  if (listen (m_accept_fd, 5) == SOCKET_ERROR)
  {
    closesocket(m_accept_fd);
    return false;
  }
Run Code Online (Sandbox Code Playgroud) 我有一个before_filter来检查API密钥的有效性.如果密钥无效,我想呈现仅标头403响应.
在我的控制器中:
before_filter :validate_api
...
def validate_api
  if params[:api_key].present? and ApiKey.find(params[:api_key])
    return true
  else
    render head :forbidden
  end
end
Run Code Online (Sandbox Code Playgroud)
问题是我得到一个DoubleRender错误,大概是当Rails进入操作并试图反正呈现响应时.据我了解,如果before_filter呈现或重定向,Rails会阻止执行操作.那不是这样吗?
如何在before_filter中呈现仅标头响应并阻止执行操作?
我有一个控制器尝试获取表单输入,在cookie中设置值,然后重定向到将从该cookie拉出的页面.
问题是cookie永远不会在重定向标头中设置.
注意:我已在Chrome和FF中测试过.Rails版本是4.0.13.设置没有重定向的cookie可以按预期工作.
这是控制器代码:
def create
  request.cookies[:foo] = "bar"
  # also tried:
  #   cookies[:foo]="bar"
  #   cookies.signed[:foo]="bar"
  #   cookies[:foo] = {
  #     value: "bar",
  #     expires: 1.month.from_now,
  #     domain: ".myapplicationhostname.com"
  #   }
  redirect_to root_url
end
Run Code Online (Sandbox Code Playgroud)
重定向上的响应头不包含Set-Cookie属性,因此,cookie值在重定向到路径中的控制器/操作中不可用.
我发现一些相互矛盾的证据表明某些浏览器在重定向中不接受cookie,但似乎不再是这种情况了?无论如何,FF或Chrome都没有Set-Cookie在响应标题中显示,因此它不会出现这是一个浏览器问题.
这是来自cURL的标题响应,请注意缺少Set-Cookie:
HTTP/1.1 302 Moved Temporarily
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-UA-Compatible: chrome=1
Location: http://app.mydomain.com:3000/
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
X-Request-Id: 1fc1c7e5-7489-4720-bb70-28588f3abcb6
X-Runtime: 4.688166
Connection: close
Server: thin 1.6.2 codename Doc Brown
Run Code Online (Sandbox Code Playgroud)
如何让rails在重定向上设置cookie(或至少设置标题)?